#define __INVALID_ATOMIC_ACCESS_TEST(op) \ { \ "atomic " #op " access through non-pointer ", \ .insns = { \ BPF_MOV64_IMM(BPF_REG_0, 1), \ BPF_MOV64_IMM(BPF_REG_1, 0), \ BPF_ATOMIC_OP(BPF_DW, op, BPF_REG_1, BPF_REG_0, -8), \ BPF_MOV64_IMM(BPF_REG_0, 0), \ BPF_EXIT_INSN(), \ }, \ .result = REJECT, \ .errstr = "R1 invalid mem access 'scalar'" \ } __INVALID_ATOMIC_ACCESS_TEST(BPF_ADD), __INVALID_ATOMIC_ACCESS_TEST(BPF_ADD | BPF_FETCH), __INVALID_ATOMIC_ACCESS_TEST(BPF_ADD), __INVALID_ATOMIC_ACCESS_TEST(BPF_ADD | BPF_FETCH), __INVALID_ATOMIC_ACCESS_TEST(BPF_AND), __INVALID_ATOMIC_ACCESS_TEST(BPF_AND | BPF_FETCH), __INVALID_ATOMIC_ACCESS_TEST(BPF_OR), __INVALID_ATOMIC_ACCESS_TEST(BPF_OR | BPF_FETCH), __INVALID_ATOMIC_ACCESS_TEST(BPF_XOR), __INVALID_ATOMIC_ACCESS_TEST(BPF_XOR | BPF_FETCH), __INVALID_ATOMIC_ACCESS_TEST(BPF_XCHG), __INVALID_ATOMIC_ACCESS_TEST(BPF_CMPXCHG),