2 "map element value store of cleared call register",
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, 1),
10 BPF_STX_MEM(BPF_DW
, BPF_REG_0
, BPF_REG_1
, 0),
13 .fixup_map_hash_48b
= { 3 },
14 .errstr_unpriv
= "R1 !read_ok",
15 .errstr
= "R1 !read_ok",
17 .result_unpriv
= REJECT
,
20 "map element value with unaligned store",
22 BPF_MOV64_REG(BPF_REG_2
, BPF_REG_10
),
23 BPF_ALU64_IMM(BPF_ADD
, BPF_REG_2
, -8),
24 BPF_ST_MEM(BPF_DW
, BPF_REG_2
, 0, 0),
25 BPF_LD_MAP_FD(BPF_REG_1
, 0),
26 BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem
),
27 BPF_JMP_IMM(BPF_JEQ
, BPF_REG_0
, 0, 17),
28 BPF_ALU64_IMM(BPF_ADD
, BPF_REG_0
, 3),
29 BPF_ST_MEM(BPF_DW
, BPF_REG_0
, 0, 42),
30 BPF_ST_MEM(BPF_DW
, BPF_REG_0
, 2, 43),
31 BPF_ST_MEM(BPF_DW
, BPF_REG_0
, -2, 44),
32 BPF_MOV64_REG(BPF_REG_8
, BPF_REG_0
),
33 BPF_ST_MEM(BPF_DW
, BPF_REG_8
, 0, 32),
34 BPF_ST_MEM(BPF_DW
, BPF_REG_8
, 2, 33),
35 BPF_ST_MEM(BPF_DW
, BPF_REG_8
, -2, 34),
36 BPF_ALU64_IMM(BPF_ADD
, BPF_REG_8
, 5),
37 BPF_ST_MEM(BPF_DW
, BPF_REG_8
, 0, 22),
38 BPF_ST_MEM(BPF_DW
, BPF_REG_8
, 4, 23),
39 BPF_ST_MEM(BPF_DW
, BPF_REG_8
, -7, 24),
40 BPF_MOV64_REG(BPF_REG_7
, BPF_REG_8
),
41 BPF_ALU64_IMM(BPF_ADD
, BPF_REG_7
, 3),
42 BPF_ST_MEM(BPF_DW
, BPF_REG_7
, 0, 22),
43 BPF_ST_MEM(BPF_DW
, BPF_REG_7
, 4, 23),
44 BPF_ST_MEM(BPF_DW
, BPF_REG_7
, -4, 24),
47 .fixup_map_hash_48b
= { 3 },
48 .errstr_unpriv
= "R0 leaks addr",
50 .result_unpriv
= REJECT
,
51 .flags
= F_NEEDS_EFFICIENT_UNALIGNED_ACCESS
,
54 "map element value with unaligned load",
56 BPF_MOV64_REG(BPF_REG_2
, BPF_REG_10
),
57 BPF_ALU64_IMM(BPF_ADD
, BPF_REG_2
, -8),
58 BPF_ST_MEM(BPF_DW
, BPF_REG_2
, 0, 0),
59 BPF_LD_MAP_FD(BPF_REG_1
, 0),
60 BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem
),
61 BPF_JMP_IMM(BPF_JEQ
, BPF_REG_0
, 0, 11),
62 BPF_LDX_MEM(BPF_W
, BPF_REG_1
, BPF_REG_0
, 0),
63 BPF_JMP_IMM(BPF_JGE
, BPF_REG_1
, MAX_ENTRIES
, 9),
64 BPF_ALU64_IMM(BPF_ADD
, BPF_REG_0
, 3),
65 BPF_LDX_MEM(BPF_DW
, BPF_REG_7
, BPF_REG_0
, 0),
66 BPF_LDX_MEM(BPF_DW
, BPF_REG_7
, BPF_REG_0
, 2),
67 BPF_MOV64_REG(BPF_REG_8
, BPF_REG_0
),
68 BPF_LDX_MEM(BPF_DW
, BPF_REG_7
, BPF_REG_8
, 0),
69 BPF_LDX_MEM(BPF_DW
, BPF_REG_7
, BPF_REG_8
, 2),
70 BPF_ALU64_IMM(BPF_ADD
, BPF_REG_0
, 5),
71 BPF_LDX_MEM(BPF_DW
, BPF_REG_7
, BPF_REG_0
, 0),
72 BPF_LDX_MEM(BPF_DW
, BPF_REG_7
, BPF_REG_0
, 4),
75 .fixup_map_hash_48b
= { 3 },
76 .errstr_unpriv
= "R0 leaks addr",
78 .result_unpriv
= REJECT
,
79 .flags
= F_NEEDS_EFFICIENT_UNALIGNED_ACCESS
,
82 "map element value is preserved across register spilling",
84 BPF_MOV64_REG(BPF_REG_2
, BPF_REG_10
),
85 BPF_ALU64_IMM(BPF_ADD
, BPF_REG_2
, -8),
86 BPF_ST_MEM(BPF_DW
, BPF_REG_2
, 0, 0),
87 BPF_LD_MAP_FD(BPF_REG_1
, 0),
88 BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem
),
89 BPF_JMP_IMM(BPF_JEQ
, BPF_REG_0
, 0, 7),
90 BPF_ALU64_IMM(BPF_ADD
, BPF_REG_0
, offsetof(struct test_val
, foo
)),
91 BPF_ST_MEM(BPF_DW
, BPF_REG_0
, 0, 42),
92 BPF_MOV64_REG(BPF_REG_1
, BPF_REG_10
),
93 BPF_ALU64_IMM(BPF_ADD
, BPF_REG_1
, -184),
94 BPF_STX_MEM(BPF_DW
, BPF_REG_1
, BPF_REG_0
, 0),
95 BPF_LDX_MEM(BPF_DW
, BPF_REG_3
, BPF_REG_1
, 0),
96 BPF_ST_MEM(BPF_DW
, BPF_REG_3
, 0, 42),
99 .fixup_map_hash_48b
= { 3 },
100 .errstr_unpriv
= "R0 leaks addr",
102 .result_unpriv
= REJECT
,
103 .flags
= F_NEEDS_EFFICIENT_UNALIGNED_ACCESS
,