0001 #define __INVALID_ATOMIC_ACCESS_TEST(op) \
0002 { \
0003 "atomic " #op " access through non-pointer ", \
0004 .insns = { \
0005 BPF_MOV64_IMM(BPF_REG_0, 1), \
0006 BPF_MOV64_IMM(BPF_REG_1, 0), \
0007 BPF_ATOMIC_OP(BPF_DW, op, BPF_REG_1, BPF_REG_0, -8), \
0008 BPF_MOV64_IMM(BPF_REG_0, 0), \
0009 BPF_EXIT_INSN(), \
0010 }, \
0011 .result = REJECT, \
0012 .errstr = "R1 invalid mem access 'scalar'" \
0013 }
0014 __INVALID_ATOMIC_ACCESS_TEST(BPF_ADD),
0015 __INVALID_ATOMIC_ACCESS_TEST(BPF_ADD | BPF_FETCH),
0016 __INVALID_ATOMIC_ACCESS_TEST(BPF_ADD),
0017 __INVALID_ATOMIC_ACCESS_TEST(BPF_ADD | BPF_FETCH),
0018 __INVALID_ATOMIC_ACCESS_TEST(BPF_AND),
0019 __INVALID_ATOMIC_ACCESS_TEST(BPF_AND | BPF_FETCH),
0020 __INVALID_ATOMIC_ACCESS_TEST(BPF_OR),
0021 __INVALID_ATOMIC_ACCESS_TEST(BPF_OR | BPF_FETCH),
0022 __INVALID_ATOMIC_ACCESS_TEST(BPF_XOR),
0023 __INVALID_ATOMIC_ACCESS_TEST(BPF_XOR | BPF_FETCH),
0024 __INVALID_ATOMIC_ACCESS_TEST(BPF_XCHG),
0025 __INVALID_ATOMIC_ACCESS_TEST(BPF_CMPXCHG),