1 {
2 "check valid spill/fill",
3 .insns = {
4
5 BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_1, -8),
6
7 BPF_LDX_MEM(BPF_DW, BPF_REG_2, BPF_REG_10, -8),
8
9
10 BPF_MOV64_REG(BPF_REG_0, BPF_REG_2),
11 BPF_EXIT_INSN(),
12 },
13 .errstr_unpriv = "R0 leaks addr",
14 .result = ACCEPT,
15 .result_unpriv = REJECT,
16 .retval = POINTER_VALUE,
17 },
18 {
19 "check valid spill/fill, skb mark",
20 .insns = {
21 BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_1),
22 BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_6, -8),
23 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_10, -8),
24 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_0,
25 offsetof(struct __sk_buff, mark)),
26 BPF_EXIT_INSN(),
27 },
28 .result = ACCEPT,
29 .result_unpriv = ACCEPT,
30 },
31 {
32 "check corrupted spill/fill",
33 .insns = {
34
35 BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_1, -8),
36
37 BPF_ST_MEM(BPF_B, BPF_REG_10, -7, 0x23),
38
39
40
41 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_10, -8),
42
43 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 8),
44 BPF_EXIT_INSN(),
45 },
46 .errstr_unpriv = "attempt to corrupt spilled",
47 .errstr = "R0 invalid mem access 'inv",
48 .result = REJECT,
49 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
50 },
51 {
52 "check corrupted spill/fill, LSB",
53 .insns = {
54 BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_1, -8),
55 BPF_ST_MEM(BPF_H, BPF_REG_10, -8, 0xcafe),
56 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_10, -8),
57 BPF_EXIT_INSN(),
58 },
59 .errstr_unpriv = "attempt to corrupt spilled",
60 .result_unpriv = REJECT,
61 .result = ACCEPT,
62 .retval = POINTER_VALUE,
63 },
64 {
65 "check corrupted spill/fill, MSB",
66 .insns = {
67 BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_1, -8),
68 BPF_ST_MEM(BPF_W, BPF_REG_10, -4, 0x12345678),
69 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_10, -8),
70 BPF_EXIT_INSN(),
71 },
72 .errstr_unpriv = "attempt to corrupt spilled",
73 .result_unpriv = REJECT,
74 .result = ACCEPT,
75 .retval = POINTER_VALUE,
76 },