Linux Audio

Check our new training course

Yocto / OpenEmbedded training

Feb 10-13, 2025
Register
Loading...
  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";