Merge tag 'i3c/for-5.13' of git://git.kernel.org/pub/scm/linux/kernel/git/i3c/linux
[linux-2.6-microblaze.git] / tools / testing / selftests / bpf / verifier / dead_code.c
1 {
2         "dead code: start",
3         .insns = {
4         BPF_JMP_IMM(BPF_JA, 0, 0, 2),
5         BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
6         BPF_JMP_IMM(BPF_JA, 0, 0, 2),
7         BPF_MOV64_IMM(BPF_REG_0, 7),
8         BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, -4),
9         BPF_EXIT_INSN(),
10         },
11         .result = ACCEPT,
12         .retval = 7,
13 },
14 {
15         "dead code: mid 1",
16         .insns = {
17         BPF_MOV64_IMM(BPF_REG_0, 7),
18         BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 0, 1),
19         BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, 0),
20         BPF_EXIT_INSN(),
21         },
22         .result = ACCEPT,
23         .retval = 7,
24 },
25 {
26         "dead code: mid 2",
27         .insns = {
28         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32),
29         BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 4),
30         BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 1),
31         BPF_JMP_IMM(BPF_JA, 0, 0, 2),
32         BPF_MOV64_IMM(BPF_REG_0, 7),
33         BPF_EXIT_INSN(),
34         BPF_MOV64_IMM(BPF_REG_0, 1),
35         BPF_EXIT_INSN(),
36         },
37         .result = ACCEPT,
38         .retval = 1,
39 },
40 {
41         "dead code: end 1",
42         .insns = {
43         BPF_MOV64_IMM(BPF_REG_0, 7),
44         BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, 1),
45         BPF_EXIT_INSN(),
46         BPF_EXIT_INSN(),
47         },
48         .result = ACCEPT,
49         .retval = 7,
50 },
51 {
52         "dead code: end 2",
53         .insns = {
54         BPF_MOV64_IMM(BPF_REG_0, 7),
55         BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, 1),
56         BPF_EXIT_INSN(),
57         BPF_MOV64_IMM(BPF_REG_0, 12),
58         BPF_EXIT_INSN(),
59         },
60         .result = ACCEPT,
61         .retval = 7,
62 },
63 {
64         "dead code: end 3",
65         .insns = {
66         BPF_MOV64_IMM(BPF_REG_0, 7),
67         BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 8, 1),
68         BPF_EXIT_INSN(),
69         BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, 1),
70         BPF_JMP_IMM(BPF_JA, 0, 0, 1),
71         BPF_MOV64_IMM(BPF_REG_0, 12),
72         BPF_JMP_IMM(BPF_JA, 0, 0, -5),
73         },
74         .result = ACCEPT,
75         .retval = 7,
76 },
77 {
78         "dead code: tail of main + func",
79         .insns = {
80         BPF_MOV64_IMM(BPF_REG_0, 7),
81         BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 8, 1),
82         BPF_EXIT_INSN(),
83         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
84         BPF_EXIT_INSN(),
85         BPF_MOV64_IMM(BPF_REG_0, 12),
86         BPF_EXIT_INSN(),
87         },
88         .errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
89         .result_unpriv = REJECT,
90         .result = ACCEPT,
91         .retval = 7,
92 },
93 {
94         "dead code: tail of main + two functions",
95         .insns = {
96         BPF_MOV64_IMM(BPF_REG_0, 7),
97         BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 8, 1),
98         BPF_EXIT_INSN(),
99         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
100         BPF_EXIT_INSN(),
101         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
102         BPF_EXIT_INSN(),
103         BPF_MOV64_IMM(BPF_REG_0, 12),
104         BPF_EXIT_INSN(),
105         },
106         .errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
107         .result_unpriv = REJECT,
108         .result = ACCEPT,
109         .retval = 7,
110 },
111 {
112         "dead code: function in the middle and mid of another func",
113         .insns = {
114         BPF_MOV64_IMM(BPF_REG_1, 7),
115         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 3),
116         BPF_EXIT_INSN(),
117         BPF_MOV64_IMM(BPF_REG_0, 12),
118         BPF_EXIT_INSN(),
119         BPF_MOV64_IMM(BPF_REG_0, 7),
120         BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 7, 1),
121         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, -5),
122         BPF_EXIT_INSN(),
123         },
124         .errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
125         .result_unpriv = REJECT,
126         .result = ACCEPT,
127         .retval = 7,
128 },
129 {
130         "dead code: middle of main before call",
131         .insns = {
132         BPF_MOV64_IMM(BPF_REG_1, 2),
133         BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 2, 1),
134         BPF_MOV64_IMM(BPF_REG_1, 5),
135         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
136         BPF_EXIT_INSN(),
137         BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
138         BPF_EXIT_INSN(),
139         },
140         .errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
141         .result_unpriv = REJECT,
142         .result = ACCEPT,
143         .retval = 2,
144 },
145 {
146         "dead code: start of a function",
147         .insns = {
148         BPF_MOV64_IMM(BPF_REG_1, 2),
149         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
150         BPF_EXIT_INSN(),
151         BPF_JMP_IMM(BPF_JA, 0, 0, 0),
152         BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
153         BPF_EXIT_INSN(),
154         },
155         .errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
156         .result_unpriv = REJECT,
157         .result = ACCEPT,
158         .retval = 2,
159 },