1 // SPDX-License-Identifier: GPL-2.0
2 /* Converted from tools/testing/selftests/bpf/verifier/div0.c */
3
4 #include <linux/bpf.h>
5 #include <bpf/bpf_helpers.h>
6 #include "bpf_misc.h"
7
8 SEC("socket")
9 __description("DIV32 by 0, zero check 1")
10 __success __success_unpriv __retval(42)
by_0_zero_check_1_1(void)11 __naked void by_0_zero_check_1_1(void)
12 {
13 asm volatile (" \
14 w0 = 42; \
15 w1 = 0; \
16 w2 = 1; \
17 w2 /= w1; \
18 exit; \
19 " ::: __clobber_all);
20 }
21
22 SEC("socket")
23 __description("DIV32 by 0, zero check 2")
24 __success __success_unpriv __retval(42)
by_0_zero_check_2_1(void)25 __naked void by_0_zero_check_2_1(void)
26 {
27 asm volatile (" \
28 w0 = 42; \
29 r1 = 0xffffffff00000000LL ll; \
30 w2 = 1; \
31 w2 /= w1; \
32 exit; \
33 " ::: __clobber_all);
34 }
35
36 SEC("socket")
37 __description("DIV64 by 0, zero check")
38 __success __success_unpriv __retval(42)
div64_by_0_zero_check(void)39 __naked void div64_by_0_zero_check(void)
40 {
41 asm volatile (" \
42 w0 = 42; \
43 w1 = 0; \
44 w2 = 1; \
45 r2 /= r1; \
46 exit; \
47 " ::: __clobber_all);
48 }
49
50 SEC("socket")
51 __description("MOD32 by 0, zero check 1")
52 __success __success_unpriv __retval(42)
by_0_zero_check_1_2(void)53 __naked void by_0_zero_check_1_2(void)
54 {
55 asm volatile (" \
56 w0 = 42; \
57 w1 = 0; \
58 w2 = 1; \
59 w2 %%= w1; \
60 exit; \
61 " ::: __clobber_all);
62 }
63
64 SEC("socket")
65 __description("MOD32 by 0, zero check 2")
66 __success __success_unpriv __retval(42)
by_0_zero_check_2_2(void)67 __naked void by_0_zero_check_2_2(void)
68 {
69 asm volatile (" \
70 w0 = 42; \
71 r1 = 0xffffffff00000000LL ll; \
72 w2 = 1; \
73 w2 %%= w1; \
74 exit; \
75 " ::: __clobber_all);
76 }
77
78 SEC("socket")
79 __description("MOD64 by 0, zero check")
80 __success __success_unpriv __retval(42)
mod64_by_0_zero_check(void)81 __naked void mod64_by_0_zero_check(void)
82 {
83 asm volatile (" \
84 w0 = 42; \
85 w1 = 0; \
86 w2 = 1; \
87 r2 %%= r1; \
88 exit; \
89 " ::: __clobber_all);
90 }
91
92 SEC("tc")
93 __description("DIV32 by 0, zero check ok, cls")
94 __success __retval(8)
_0_zero_check_ok_cls_1(void)95 __naked void _0_zero_check_ok_cls_1(void)
96 {
97 asm volatile (" \
98 w0 = 42; \
99 w1 = 2; \
100 w2 = 16; \
101 w2 /= w1; \
102 r0 = r2; \
103 exit; \
104 " ::: __clobber_all);
105 }
106
107 SEC("tc")
108 __description("DIV32 by 0, zero check 1, cls")
109 __success __retval(0)
_0_zero_check_1_cls_1(void)110 __naked void _0_zero_check_1_cls_1(void)
111 {
112 asm volatile (" \
113 w1 = 0; \
114 w0 = 1; \
115 w0 /= w1; \
116 exit; \
117 " ::: __clobber_all);
118 }
119
120 SEC("tc")
121 __description("DIV32 by 0, zero check 2, cls")
122 __success __retval(0)
_0_zero_check_2_cls_1(void)123 __naked void _0_zero_check_2_cls_1(void)
124 {
125 asm volatile (" \
126 r1 = 0xffffffff00000000LL ll; \
127 w0 = 1; \
128 w0 /= w1; \
129 exit; \
130 " ::: __clobber_all);
131 }
132
133 SEC("tc")
134 __description("DIV64 by 0, zero check, cls")
135 __success __retval(0)
by_0_zero_check_cls(void)136 __naked void by_0_zero_check_cls(void)
137 {
138 asm volatile (" \
139 w1 = 0; \
140 w0 = 1; \
141 r0 /= r1; \
142 exit; \
143 " ::: __clobber_all);
144 }
145
146 SEC("tc")
147 __description("MOD32 by 0, zero check ok, cls")
148 __success __retval(2)
_0_zero_check_ok_cls_2(void)149 __naked void _0_zero_check_ok_cls_2(void)
150 {
151 asm volatile (" \
152 w0 = 42; \
153 w1 = 3; \
154 w2 = 5; \
155 w2 %%= w1; \
156 r0 = r2; \
157 exit; \
158 " ::: __clobber_all);
159 }
160
161 SEC("tc")
162 __description("MOD32 by 0, zero check 1, cls")
163 __success __retval(1)
_0_zero_check_1_cls_2(void)164 __naked void _0_zero_check_1_cls_2(void)
165 {
166 asm volatile (" \
167 w1 = 0; \
168 w0 = 1; \
169 w0 %%= w1; \
170 exit; \
171 " ::: __clobber_all);
172 }
173
174 SEC("tc")
175 __description("MOD32 by 0, zero check 2, cls")
176 __success __retval(1)
_0_zero_check_2_cls_2(void)177 __naked void _0_zero_check_2_cls_2(void)
178 {
179 asm volatile (" \
180 r1 = 0xffffffff00000000LL ll; \
181 w0 = 1; \
182 w0 %%= w1; \
183 exit; \
184 " ::: __clobber_all);
185 }
186
187 SEC("tc")
188 __description("MOD64 by 0, zero check 1, cls")
189 __success __retval(2)
_0_zero_check_1_cls_3(void)190 __naked void _0_zero_check_1_cls_3(void)
191 {
192 asm volatile (" \
193 w1 = 0; \
194 w0 = 2; \
195 r0 %%= r1; \
196 exit; \
197 " ::: __clobber_all);
198 }
199
200 SEC("tc")
201 __description("MOD64 by 0, zero check 2, cls")
202 __success __retval(-1)
_0_zero_check_2_cls_3(void)203 __naked void _0_zero_check_2_cls_3(void)
204 {
205 asm volatile (" \
206 w1 = 0; \
207 w0 = -1; \
208 r0 %%= r1; \
209 exit; \
210 " ::: __clobber_all);
211 }
212
213 char _license[] SEC("license") = "GPL";
214