root/tools/testing/selftests/bpf/verifier/xadd.c

/* [<][>][^][v][top][bottom][index][help] */
   1 {
   2         "xadd/w check unaligned stack",
   3         .insns = {
   4         BPF_MOV64_IMM(BPF_REG_0, 1),
   5         BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_0, -8),
   6         BPF_STX_XADD(BPF_W, BPF_REG_10, BPF_REG_0, -7),
   7         BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_10, -8),
   8         BPF_EXIT_INSN(),
   9         },
  10         .result = REJECT,
  11         .errstr = "misaligned stack access off",
  12         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
  13 },
  14 {
  15         "xadd/w check unaligned map",
  16         .insns = {
  17         BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
  18         BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
  19         BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
  20         BPF_LD_MAP_FD(BPF_REG_1, 0),
  21         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
  22         BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),
  23         BPF_EXIT_INSN(),
  24         BPF_MOV64_IMM(BPF_REG_1, 1),
  25         BPF_STX_XADD(BPF_W, BPF_REG_0, BPF_REG_1, 3),
  26         BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_0, 3),
  27         BPF_EXIT_INSN(),
  28         },
  29         .fixup_map_hash_8b = { 3 },
  30         .result = REJECT,
  31         .errstr = "misaligned value access off",
  32         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
  33 },
  34 {
  35         "xadd/w check unaligned pkt",
  36         .insns = {
  37         BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
  38         BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
  39                     offsetof(struct xdp_md, data_end)),
  40         BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
  41         BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
  42         BPF_JMP_REG(BPF_JLT, BPF_REG_1, BPF_REG_3, 2),
  43         BPF_MOV64_IMM(BPF_REG_0, 99),
  44         BPF_JMP_IMM(BPF_JA, 0, 0, 6),
  45         BPF_MOV64_IMM(BPF_REG_0, 1),
  46         BPF_ST_MEM(BPF_W, BPF_REG_2, 0, 0),
  47         BPF_ST_MEM(BPF_W, BPF_REG_2, 3, 0),
  48         BPF_STX_XADD(BPF_W, BPF_REG_2, BPF_REG_0, 1),
  49         BPF_STX_XADD(BPF_W, BPF_REG_2, BPF_REG_0, 2),
  50         BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_2, 1),
  51         BPF_EXIT_INSN(),
  52         },
  53         .result = REJECT,
  54         .errstr = "BPF_XADD stores into R2 pkt is not allowed",
  55         .prog_type = BPF_PROG_TYPE_XDP,
  56         .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
  57 },
  58 {
  59         "xadd/w check whether src/dst got mangled, 1",
  60         .insns = {
  61         BPF_MOV64_IMM(BPF_REG_0, 1),
  62         BPF_MOV64_REG(BPF_REG_6, BPF_REG_0),
  63         BPF_MOV64_REG(BPF_REG_7, BPF_REG_10),
  64         BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_0, -8),
  65         BPF_STX_XADD(BPF_DW, BPF_REG_10, BPF_REG_0, -8),
  66         BPF_STX_XADD(BPF_DW, BPF_REG_10, BPF_REG_0, -8),
  67         BPF_JMP_REG(BPF_JNE, BPF_REG_6, BPF_REG_0, 3),
  68         BPF_JMP_REG(BPF_JNE, BPF_REG_7, BPF_REG_10, 2),
  69         BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_10, -8),
  70         BPF_EXIT_INSN(),
  71         BPF_MOV64_IMM(BPF_REG_0, 42),
  72         BPF_EXIT_INSN(),
  73         },
  74         .result = ACCEPT,
  75         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
  76         .retval = 3,
  77 },
  78 {
  79         "xadd/w check whether src/dst got mangled, 2",
  80         .insns = {
  81         BPF_MOV64_IMM(BPF_REG_0, 1),
  82         BPF_MOV64_REG(BPF_REG_6, BPF_REG_0),
  83         BPF_MOV64_REG(BPF_REG_7, BPF_REG_10),
  84         BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -8),
  85         BPF_STX_XADD(BPF_W, BPF_REG_10, BPF_REG_0, -8),
  86         BPF_STX_XADD(BPF_W, BPF_REG_10, BPF_REG_0, -8),
  87         BPF_JMP_REG(BPF_JNE, BPF_REG_6, BPF_REG_0, 3),
  88         BPF_JMP_REG(BPF_JNE, BPF_REG_7, BPF_REG_10, 2),
  89         BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_10, -8),
  90         BPF_EXIT_INSN(),
  91         BPF_MOV64_IMM(BPF_REG_0, 42),
  92         BPF_EXIT_INSN(),
  93         },
  94         .result = ACCEPT,
  95         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
  96         .retval = 3,
  97 },

/* [<][>][^][v][top][bottom][index][help] */