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
8SEC("socket")
9__description("DIV32 by 0, zero check 1")
10__success __success_unpriv __retval(42)
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
22SEC("socket")
23__description("DIV32 by 0, zero check 2")
24__success __success_unpriv __retval(42)
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
36SEC("socket")
37__description("DIV64 by 0, zero check")
38__success __success_unpriv __retval(42)
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
50SEC("socket")
51__description("MOD32 by 0, zero check 1")
52__success __success_unpriv __retval(42)
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
64SEC("socket")
65__description("MOD32 by 0, zero check 2")
66__success __success_unpriv __retval(42)
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
78SEC("socket")
79__description("MOD64 by 0, zero check")
80__success __success_unpriv __retval(42)
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
92SEC("tc")
93__description("DIV32 by 0, zero check ok, cls")
94__success __retval(8)
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
107SEC("tc")
108__description("DIV32 by 0, zero check 1, cls")
109__success __retval(0)
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
120SEC("tc")
121__description("DIV32 by 0, zero check 2, cls")
122__success __retval(0)
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
133SEC("tc")
134__description("DIV64 by 0, zero check, cls")
135__success __retval(0)
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
146SEC("tc")
147__description("MOD32 by 0, zero check ok, cls")
148__success __retval(2)
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
161SEC("tc")
162__description("MOD32 by 0, zero check 1, cls")
163__success __retval(1)
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
174SEC("tc")
175__description("MOD32 by 0, zero check 2, cls")
176__success __retval(1)
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
187SEC("tc")
188__description("MOD64 by 0, zero check 1, cls")
189__success __retval(2)
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
200SEC("tc")
201__description("MOD64 by 0, zero check 2, cls")
202__success __retval(-1)
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
213char _license[] SEC("license") = "GPL";
214

source code of linux/tools/testing/selftests/bpf/progs/verifier_div0.c