1 {
2 	"map element value illegal alu op, 1",
3 	.insns = {
4 	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
5 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
6 	BPF_ST_MEM(BPF_DW, BPF_REG_2, 0, 0),
7 	BPF_LD_MAP_FD(BPF_REG_1, 0),
8 	BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem),
9 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 2),
10 	BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 8),
11 	BPF_ST_MEM(BPF_DW, BPF_REG_0, 0, 22),
12 	BPF_EXIT_INSN(),
13 	},
14 	.fixup_map_hash_48b = { 3 },
15 	.errstr = "R0 bitwise operator &= on pointer",
16 	.result = REJECT,
17 },
18 {
19 	"map element value illegal alu op, 2",
20 	.insns = {
21 	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
22 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
23 	BPF_ST_MEM(BPF_DW, BPF_REG_2, 0, 0),
24 	BPF_LD_MAP_FD(BPF_REG_1, 0),
25 	BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem),
26 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 2),
27 	BPF_ALU32_IMM(BPF_ADD, BPF_REG_0, 0),
28 	BPF_ST_MEM(BPF_DW, BPF_REG_0, 0, 22),
29 	BPF_EXIT_INSN(),
30 	},
31 	.fixup_map_hash_48b = { 3 },
32 	.errstr = "R0 32-bit pointer arithmetic prohibited",
33 	.result = REJECT,
34 },
35 {
36 	"map element value illegal alu op, 3",
37 	.insns = {
38 	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
39 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
40 	BPF_ST_MEM(BPF_DW, BPF_REG_2, 0, 0),
41 	BPF_LD_MAP_FD(BPF_REG_1, 0),
42 	BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem),
43 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 2),
44 	BPF_ALU64_IMM(BPF_DIV, BPF_REG_0, 42),
45 	BPF_ST_MEM(BPF_DW, BPF_REG_0, 0, 22),
46 	BPF_EXIT_INSN(),
47 	},
48 	.fixup_map_hash_48b = { 3 },
49 	.errstr = "R0 pointer arithmetic with /= operator",
50 	.result = REJECT,
51 },
52 {
53 	"map element value illegal alu op, 4",
54 	.insns = {
55 	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
56 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
57 	BPF_ST_MEM(BPF_DW, BPF_REG_2, 0, 0),
58 	BPF_LD_MAP_FD(BPF_REG_1, 0),
59 	BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem),
60 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 2),
61 	BPF_ENDIAN(BPF_FROM_BE, BPF_REG_0, 64),
62 	BPF_ST_MEM(BPF_DW, BPF_REG_0, 0, 22),
63 	BPF_EXIT_INSN(),
64 	},
65 	.fixup_map_hash_48b = { 3 },
66 	.errstr_unpriv = "R0 pointer arithmetic prohibited",
67 	.errstr = "invalid mem access 'scalar'",
68 	.result = REJECT,
69 	.result_unpriv = REJECT,
70 	.flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
71 },
72 {
73 	"map element value illegal alu op, 5",
74 	.insns = {
75 	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
76 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
77 	BPF_ST_MEM(BPF_DW, BPF_REG_2, 0, 0),
78 	BPF_LD_MAP_FD(BPF_REG_1, 0),
79 	BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem),
80 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 7),
81 	BPF_MOV64_IMM(BPF_REG_3, 4096),
82 	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
83 	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
84 	BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_0, 0),
85 	BPF_ATOMIC_OP(BPF_DW, BPF_ADD, BPF_REG_2, BPF_REG_3, 0),
86 	BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_2, 0),
87 	BPF_ST_MEM(BPF_DW, BPF_REG_0, 0, 22),
88 	BPF_EXIT_INSN(),
89 	},
90 	.fixup_map_hash_48b = { 3 },
91 	.errstr_unpriv = "leaking pointer from stack off -8",
92 	.errstr = "R0 invalid mem access 'scalar'",
93 	.result = REJECT,
94 	.flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
95 },
96