1*ade3f08fSEduard Zingerman // SPDX-License-Identifier: GPL-2.0
2*ade3f08fSEduard Zingerman /* Converted from tools/testing/selftests/bpf/verifier/masking.c */
3*ade3f08fSEduard Zingerman
4*ade3f08fSEduard Zingerman #include <linux/bpf.h>
5*ade3f08fSEduard Zingerman #include <bpf/bpf_helpers.h>
6*ade3f08fSEduard Zingerman #include "bpf_misc.h"
7*ade3f08fSEduard Zingerman
8*ade3f08fSEduard Zingerman SEC("socket")
9*ade3f08fSEduard Zingerman __description("masking, test out of bounds 1")
10*ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
test_out_of_bounds_1(void)11*ade3f08fSEduard Zingerman __naked void test_out_of_bounds_1(void)
12*ade3f08fSEduard Zingerman {
13*ade3f08fSEduard Zingerman asm volatile (" \
14*ade3f08fSEduard Zingerman w1 = 5; \
15*ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
16*ade3f08fSEduard Zingerman r2 -= r1; \
17*ade3f08fSEduard Zingerman r2 |= r1; \
18*ade3f08fSEduard Zingerman r2 = -r2; \
19*ade3f08fSEduard Zingerman r2 s>>= 63; \
20*ade3f08fSEduard Zingerman r1 &= r2; \
21*ade3f08fSEduard Zingerman r0 = r1; \
22*ade3f08fSEduard Zingerman exit; \
23*ade3f08fSEduard Zingerman " :
24*ade3f08fSEduard Zingerman : __imm_const(__imm_0, 5 - 1)
25*ade3f08fSEduard Zingerman : __clobber_all);
26*ade3f08fSEduard Zingerman }
27*ade3f08fSEduard Zingerman
28*ade3f08fSEduard Zingerman SEC("socket")
29*ade3f08fSEduard Zingerman __description("masking, test out of bounds 2")
30*ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
test_out_of_bounds_2(void)31*ade3f08fSEduard Zingerman __naked void test_out_of_bounds_2(void)
32*ade3f08fSEduard Zingerman {
33*ade3f08fSEduard Zingerman asm volatile (" \
34*ade3f08fSEduard Zingerman w1 = 1; \
35*ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
36*ade3f08fSEduard Zingerman r2 -= r1; \
37*ade3f08fSEduard Zingerman r2 |= r1; \
38*ade3f08fSEduard Zingerman r2 = -r2; \
39*ade3f08fSEduard Zingerman r2 s>>= 63; \
40*ade3f08fSEduard Zingerman r1 &= r2; \
41*ade3f08fSEduard Zingerman r0 = r1; \
42*ade3f08fSEduard Zingerman exit; \
43*ade3f08fSEduard Zingerman " :
44*ade3f08fSEduard Zingerman : __imm_const(__imm_0, 1 - 1)
45*ade3f08fSEduard Zingerman : __clobber_all);
46*ade3f08fSEduard Zingerman }
47*ade3f08fSEduard Zingerman
48*ade3f08fSEduard Zingerman SEC("socket")
49*ade3f08fSEduard Zingerman __description("masking, test out of bounds 3")
50*ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
test_out_of_bounds_3(void)51*ade3f08fSEduard Zingerman __naked void test_out_of_bounds_3(void)
52*ade3f08fSEduard Zingerman {
53*ade3f08fSEduard Zingerman asm volatile (" \
54*ade3f08fSEduard Zingerman w1 = 0xffffffff; \
55*ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
56*ade3f08fSEduard Zingerman r2 -= r1; \
57*ade3f08fSEduard Zingerman r2 |= r1; \
58*ade3f08fSEduard Zingerman r2 = -r2; \
59*ade3f08fSEduard Zingerman r2 s>>= 63; \
60*ade3f08fSEduard Zingerman r1 &= r2; \
61*ade3f08fSEduard Zingerman r0 = r1; \
62*ade3f08fSEduard Zingerman exit; \
63*ade3f08fSEduard Zingerman " :
64*ade3f08fSEduard Zingerman : __imm_const(__imm_0, 0xffffffff - 1)
65*ade3f08fSEduard Zingerman : __clobber_all);
66*ade3f08fSEduard Zingerman }
67*ade3f08fSEduard Zingerman
68*ade3f08fSEduard Zingerman SEC("socket")
69*ade3f08fSEduard Zingerman __description("masking, test out of bounds 4")
70*ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
test_out_of_bounds_4(void)71*ade3f08fSEduard Zingerman __naked void test_out_of_bounds_4(void)
72*ade3f08fSEduard Zingerman {
73*ade3f08fSEduard Zingerman asm volatile (" \
74*ade3f08fSEduard Zingerman w1 = 0xffffffff; \
75*ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
76*ade3f08fSEduard Zingerman r2 -= r1; \
77*ade3f08fSEduard Zingerman r2 |= r1; \
78*ade3f08fSEduard Zingerman r2 = -r2; \
79*ade3f08fSEduard Zingerman r2 s>>= 63; \
80*ade3f08fSEduard Zingerman r1 &= r2; \
81*ade3f08fSEduard Zingerman r0 = r1; \
82*ade3f08fSEduard Zingerman exit; \
83*ade3f08fSEduard Zingerman " :
84*ade3f08fSEduard Zingerman : __imm_const(__imm_0, 1 - 1)
85*ade3f08fSEduard Zingerman : __clobber_all);
86*ade3f08fSEduard Zingerman }
87*ade3f08fSEduard Zingerman
88*ade3f08fSEduard Zingerman SEC("socket")
89*ade3f08fSEduard Zingerman __description("masking, test out of bounds 5")
90*ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
test_out_of_bounds_5(void)91*ade3f08fSEduard Zingerman __naked void test_out_of_bounds_5(void)
92*ade3f08fSEduard Zingerman {
93*ade3f08fSEduard Zingerman asm volatile (" \
94*ade3f08fSEduard Zingerman w1 = -1; \
95*ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
96*ade3f08fSEduard Zingerman r2 -= r1; \
97*ade3f08fSEduard Zingerman r2 |= r1; \
98*ade3f08fSEduard Zingerman r2 = -r2; \
99*ade3f08fSEduard Zingerman r2 s>>= 63; \
100*ade3f08fSEduard Zingerman r1 &= r2; \
101*ade3f08fSEduard Zingerman r0 = r1; \
102*ade3f08fSEduard Zingerman exit; \
103*ade3f08fSEduard Zingerman " :
104*ade3f08fSEduard Zingerman : __imm_const(__imm_0, 1 - 1)
105*ade3f08fSEduard Zingerman : __clobber_all);
106*ade3f08fSEduard Zingerman }
107*ade3f08fSEduard Zingerman
108*ade3f08fSEduard Zingerman SEC("socket")
109*ade3f08fSEduard Zingerman __description("masking, test out of bounds 6")
110*ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
test_out_of_bounds_6(void)111*ade3f08fSEduard Zingerman __naked void test_out_of_bounds_6(void)
112*ade3f08fSEduard Zingerman {
113*ade3f08fSEduard Zingerman asm volatile (" \
114*ade3f08fSEduard Zingerman w1 = -1; \
115*ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
116*ade3f08fSEduard Zingerman r2 -= r1; \
117*ade3f08fSEduard Zingerman r2 |= r1; \
118*ade3f08fSEduard Zingerman r2 = -r2; \
119*ade3f08fSEduard Zingerman r2 s>>= 63; \
120*ade3f08fSEduard Zingerman r1 &= r2; \
121*ade3f08fSEduard Zingerman r0 = r1; \
122*ade3f08fSEduard Zingerman exit; \
123*ade3f08fSEduard Zingerman " :
124*ade3f08fSEduard Zingerman : __imm_const(__imm_0, 0xffffffff - 1)
125*ade3f08fSEduard Zingerman : __clobber_all);
126*ade3f08fSEduard Zingerman }
127*ade3f08fSEduard Zingerman
128*ade3f08fSEduard Zingerman SEC("socket")
129*ade3f08fSEduard Zingerman __description("masking, test out of bounds 7")
130*ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
test_out_of_bounds_7(void)131*ade3f08fSEduard Zingerman __naked void test_out_of_bounds_7(void)
132*ade3f08fSEduard Zingerman {
133*ade3f08fSEduard Zingerman asm volatile (" \
134*ade3f08fSEduard Zingerman r1 = 5; \
135*ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
136*ade3f08fSEduard Zingerman r2 -= r1; \
137*ade3f08fSEduard Zingerman r2 |= r1; \
138*ade3f08fSEduard Zingerman r2 = -r2; \
139*ade3f08fSEduard Zingerman r2 s>>= 63; \
140*ade3f08fSEduard Zingerman r1 &= r2; \
141*ade3f08fSEduard Zingerman r0 = r1; \
142*ade3f08fSEduard Zingerman exit; \
143*ade3f08fSEduard Zingerman " :
144*ade3f08fSEduard Zingerman : __imm_const(__imm_0, 5 - 1)
145*ade3f08fSEduard Zingerman : __clobber_all);
146*ade3f08fSEduard Zingerman }
147*ade3f08fSEduard Zingerman
148*ade3f08fSEduard Zingerman SEC("socket")
149*ade3f08fSEduard Zingerman __description("masking, test out of bounds 8")
150*ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
test_out_of_bounds_8(void)151*ade3f08fSEduard Zingerman __naked void test_out_of_bounds_8(void)
152*ade3f08fSEduard Zingerman {
153*ade3f08fSEduard Zingerman asm volatile (" \
154*ade3f08fSEduard Zingerman r1 = 1; \
155*ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
156*ade3f08fSEduard Zingerman r2 -= r1; \
157*ade3f08fSEduard Zingerman r2 |= r1; \
158*ade3f08fSEduard Zingerman r2 = -r2; \
159*ade3f08fSEduard Zingerman r2 s>>= 63; \
160*ade3f08fSEduard Zingerman r1 &= r2; \
161*ade3f08fSEduard Zingerman r0 = r1; \
162*ade3f08fSEduard Zingerman exit; \
163*ade3f08fSEduard Zingerman " :
164*ade3f08fSEduard Zingerman : __imm_const(__imm_0, 1 - 1)
165*ade3f08fSEduard Zingerman : __clobber_all);
166*ade3f08fSEduard Zingerman }
167*ade3f08fSEduard Zingerman
168*ade3f08fSEduard Zingerman SEC("socket")
169*ade3f08fSEduard Zingerman __description("masking, test out of bounds 9")
170*ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
test_out_of_bounds_9(void)171*ade3f08fSEduard Zingerman __naked void test_out_of_bounds_9(void)
172*ade3f08fSEduard Zingerman {
173*ade3f08fSEduard Zingerman asm volatile (" \
174*ade3f08fSEduard Zingerman r1 = 0xffffffff; \
175*ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
176*ade3f08fSEduard Zingerman r2 -= r1; \
177*ade3f08fSEduard Zingerman r2 |= r1; \
178*ade3f08fSEduard Zingerman r2 = -r2; \
179*ade3f08fSEduard Zingerman r2 s>>= 63; \
180*ade3f08fSEduard Zingerman r1 &= r2; \
181*ade3f08fSEduard Zingerman r0 = r1; \
182*ade3f08fSEduard Zingerman exit; \
183*ade3f08fSEduard Zingerman " :
184*ade3f08fSEduard Zingerman : __imm_const(__imm_0, 0xffffffff - 1)
185*ade3f08fSEduard Zingerman : __clobber_all);
186*ade3f08fSEduard Zingerman }
187*ade3f08fSEduard Zingerman
188*ade3f08fSEduard Zingerman SEC("socket")
189*ade3f08fSEduard Zingerman __description("masking, test out of bounds 10")
190*ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
test_out_of_bounds_10(void)191*ade3f08fSEduard Zingerman __naked void test_out_of_bounds_10(void)
192*ade3f08fSEduard Zingerman {
193*ade3f08fSEduard Zingerman asm volatile (" \
194*ade3f08fSEduard Zingerman r1 = 0xffffffff; \
195*ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
196*ade3f08fSEduard Zingerman r2 -= r1; \
197*ade3f08fSEduard Zingerman r2 |= r1; \
198*ade3f08fSEduard Zingerman r2 = -r2; \
199*ade3f08fSEduard Zingerman r2 s>>= 63; \
200*ade3f08fSEduard Zingerman r1 &= r2; \
201*ade3f08fSEduard Zingerman r0 = r1; \
202*ade3f08fSEduard Zingerman exit; \
203*ade3f08fSEduard Zingerman " :
204*ade3f08fSEduard Zingerman : __imm_const(__imm_0, 1 - 1)
205*ade3f08fSEduard Zingerman : __clobber_all);
206*ade3f08fSEduard Zingerman }
207*ade3f08fSEduard Zingerman
208*ade3f08fSEduard Zingerman SEC("socket")
209*ade3f08fSEduard Zingerman __description("masking, test out of bounds 11")
210*ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
test_out_of_bounds_11(void)211*ade3f08fSEduard Zingerman __naked void test_out_of_bounds_11(void)
212*ade3f08fSEduard Zingerman {
213*ade3f08fSEduard Zingerman asm volatile (" \
214*ade3f08fSEduard Zingerman r1 = -1; \
215*ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
216*ade3f08fSEduard Zingerman r2 -= r1; \
217*ade3f08fSEduard Zingerman r2 |= r1; \
218*ade3f08fSEduard Zingerman r2 = -r2; \
219*ade3f08fSEduard Zingerman r2 s>>= 63; \
220*ade3f08fSEduard Zingerman r1 &= r2; \
221*ade3f08fSEduard Zingerman r0 = r1; \
222*ade3f08fSEduard Zingerman exit; \
223*ade3f08fSEduard Zingerman " :
224*ade3f08fSEduard Zingerman : __imm_const(__imm_0, 1 - 1)
225*ade3f08fSEduard Zingerman : __clobber_all);
226*ade3f08fSEduard Zingerman }
227*ade3f08fSEduard Zingerman
228*ade3f08fSEduard Zingerman SEC("socket")
229*ade3f08fSEduard Zingerman __description("masking, test out of bounds 12")
230*ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
test_out_of_bounds_12(void)231*ade3f08fSEduard Zingerman __naked void test_out_of_bounds_12(void)
232*ade3f08fSEduard Zingerman {
233*ade3f08fSEduard Zingerman asm volatile (" \
234*ade3f08fSEduard Zingerman r1 = -1; \
235*ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
236*ade3f08fSEduard Zingerman r2 -= r1; \
237*ade3f08fSEduard Zingerman r2 |= r1; \
238*ade3f08fSEduard Zingerman r2 = -r2; \
239*ade3f08fSEduard Zingerman r2 s>>= 63; \
240*ade3f08fSEduard Zingerman r1 &= r2; \
241*ade3f08fSEduard Zingerman r0 = r1; \
242*ade3f08fSEduard Zingerman exit; \
243*ade3f08fSEduard Zingerman " :
244*ade3f08fSEduard Zingerman : __imm_const(__imm_0, 0xffffffff - 1)
245*ade3f08fSEduard Zingerman : __clobber_all);
246*ade3f08fSEduard Zingerman }
247*ade3f08fSEduard Zingerman
248*ade3f08fSEduard Zingerman SEC("socket")
249*ade3f08fSEduard Zingerman __description("masking, test in bounds 1")
250*ade3f08fSEduard Zingerman __success __success_unpriv __retval(4)
masking_test_in_bounds_1(void)251*ade3f08fSEduard Zingerman __naked void masking_test_in_bounds_1(void)
252*ade3f08fSEduard Zingerman {
253*ade3f08fSEduard Zingerman asm volatile (" \
254*ade3f08fSEduard Zingerman w1 = 4; \
255*ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
256*ade3f08fSEduard Zingerman r2 -= r1; \
257*ade3f08fSEduard Zingerman r2 |= r1; \
258*ade3f08fSEduard Zingerman r2 = -r2; \
259*ade3f08fSEduard Zingerman r2 s>>= 63; \
260*ade3f08fSEduard Zingerman r1 &= r2; \
261*ade3f08fSEduard Zingerman r0 = r1; \
262*ade3f08fSEduard Zingerman exit; \
263*ade3f08fSEduard Zingerman " :
264*ade3f08fSEduard Zingerman : __imm_const(__imm_0, 5 - 1)
265*ade3f08fSEduard Zingerman : __clobber_all);
266*ade3f08fSEduard Zingerman }
267*ade3f08fSEduard Zingerman
268*ade3f08fSEduard Zingerman SEC("socket")
269*ade3f08fSEduard Zingerman __description("masking, test in bounds 2")
270*ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
masking_test_in_bounds_2(void)271*ade3f08fSEduard Zingerman __naked void masking_test_in_bounds_2(void)
272*ade3f08fSEduard Zingerman {
273*ade3f08fSEduard Zingerman asm volatile (" \
274*ade3f08fSEduard Zingerman w1 = 0; \
275*ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
276*ade3f08fSEduard Zingerman r2 -= r1; \
277*ade3f08fSEduard Zingerman r2 |= r1; \
278*ade3f08fSEduard Zingerman r2 = -r2; \
279*ade3f08fSEduard Zingerman r2 s>>= 63; \
280*ade3f08fSEduard Zingerman r1 &= r2; \
281*ade3f08fSEduard Zingerman r0 = r1; \
282*ade3f08fSEduard Zingerman exit; \
283*ade3f08fSEduard Zingerman " :
284*ade3f08fSEduard Zingerman : __imm_const(__imm_0, 0xffffffff - 1)
285*ade3f08fSEduard Zingerman : __clobber_all);
286*ade3f08fSEduard Zingerman }
287*ade3f08fSEduard Zingerman
288*ade3f08fSEduard Zingerman SEC("socket")
289*ade3f08fSEduard Zingerman __description("masking, test in bounds 3")
290*ade3f08fSEduard Zingerman __success __success_unpriv __retval(0xfffffffe)
masking_test_in_bounds_3(void)291*ade3f08fSEduard Zingerman __naked void masking_test_in_bounds_3(void)
292*ade3f08fSEduard Zingerman {
293*ade3f08fSEduard Zingerman asm volatile (" \
294*ade3f08fSEduard Zingerman w1 = 0xfffffffe; \
295*ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
296*ade3f08fSEduard Zingerman r2 -= r1; \
297*ade3f08fSEduard Zingerman r2 |= r1; \
298*ade3f08fSEduard Zingerman r2 = -r2; \
299*ade3f08fSEduard Zingerman r2 s>>= 63; \
300*ade3f08fSEduard Zingerman r1 &= r2; \
301*ade3f08fSEduard Zingerman r0 = r1; \
302*ade3f08fSEduard Zingerman exit; \
303*ade3f08fSEduard Zingerman " :
304*ade3f08fSEduard Zingerman : __imm_const(__imm_0, 0xffffffff - 1)
305*ade3f08fSEduard Zingerman : __clobber_all);
306*ade3f08fSEduard Zingerman }
307*ade3f08fSEduard Zingerman
308*ade3f08fSEduard Zingerman SEC("socket")
309*ade3f08fSEduard Zingerman __description("masking, test in bounds 4")
310*ade3f08fSEduard Zingerman __success __success_unpriv __retval(0xabcde)
masking_test_in_bounds_4(void)311*ade3f08fSEduard Zingerman __naked void masking_test_in_bounds_4(void)
312*ade3f08fSEduard Zingerman {
313*ade3f08fSEduard Zingerman asm volatile (" \
314*ade3f08fSEduard Zingerman w1 = 0xabcde; \
315*ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
316*ade3f08fSEduard Zingerman r2 -= r1; \
317*ade3f08fSEduard Zingerman r2 |= r1; \
318*ade3f08fSEduard Zingerman r2 = -r2; \
319*ade3f08fSEduard Zingerman r2 s>>= 63; \
320*ade3f08fSEduard Zingerman r1 &= r2; \
321*ade3f08fSEduard Zingerman r0 = r1; \
322*ade3f08fSEduard Zingerman exit; \
323*ade3f08fSEduard Zingerman " :
324*ade3f08fSEduard Zingerman : __imm_const(__imm_0, 0xabcdef - 1)
325*ade3f08fSEduard Zingerman : __clobber_all);
326*ade3f08fSEduard Zingerman }
327*ade3f08fSEduard Zingerman
328*ade3f08fSEduard Zingerman SEC("socket")
329*ade3f08fSEduard Zingerman __description("masking, test in bounds 5")
330*ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
masking_test_in_bounds_5(void)331*ade3f08fSEduard Zingerman __naked void masking_test_in_bounds_5(void)
332*ade3f08fSEduard Zingerman {
333*ade3f08fSEduard Zingerman asm volatile (" \
334*ade3f08fSEduard Zingerman w1 = 0; \
335*ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
336*ade3f08fSEduard Zingerman r2 -= r1; \
337*ade3f08fSEduard Zingerman r2 |= r1; \
338*ade3f08fSEduard Zingerman r2 = -r2; \
339*ade3f08fSEduard Zingerman r2 s>>= 63; \
340*ade3f08fSEduard Zingerman r1 &= r2; \
341*ade3f08fSEduard Zingerman r0 = r1; \
342*ade3f08fSEduard Zingerman exit; \
343*ade3f08fSEduard Zingerman " :
344*ade3f08fSEduard Zingerman : __imm_const(__imm_0, 1 - 1)
345*ade3f08fSEduard Zingerman : __clobber_all);
346*ade3f08fSEduard Zingerman }
347*ade3f08fSEduard Zingerman
348*ade3f08fSEduard Zingerman SEC("socket")
349*ade3f08fSEduard Zingerman __description("masking, test in bounds 6")
350*ade3f08fSEduard Zingerman __success __success_unpriv __retval(46)
masking_test_in_bounds_6(void)351*ade3f08fSEduard Zingerman __naked void masking_test_in_bounds_6(void)
352*ade3f08fSEduard Zingerman {
353*ade3f08fSEduard Zingerman asm volatile (" \
354*ade3f08fSEduard Zingerman w1 = 46; \
355*ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
356*ade3f08fSEduard Zingerman r2 -= r1; \
357*ade3f08fSEduard Zingerman r2 |= r1; \
358*ade3f08fSEduard Zingerman r2 = -r2; \
359*ade3f08fSEduard Zingerman r2 s>>= 63; \
360*ade3f08fSEduard Zingerman r1 &= r2; \
361*ade3f08fSEduard Zingerman r0 = r1; \
362*ade3f08fSEduard Zingerman exit; \
363*ade3f08fSEduard Zingerman " :
364*ade3f08fSEduard Zingerman : __imm_const(__imm_0, 47 - 1)
365*ade3f08fSEduard Zingerman : __clobber_all);
366*ade3f08fSEduard Zingerman }
367*ade3f08fSEduard Zingerman
368*ade3f08fSEduard Zingerman SEC("socket")
369*ade3f08fSEduard Zingerman __description("masking, test in bounds 7")
370*ade3f08fSEduard Zingerman __success __success_unpriv __retval(46)
masking_test_in_bounds_7(void)371*ade3f08fSEduard Zingerman __naked void masking_test_in_bounds_7(void)
372*ade3f08fSEduard Zingerman {
373*ade3f08fSEduard Zingerman asm volatile (" \
374*ade3f08fSEduard Zingerman r3 = -46; \
375*ade3f08fSEduard Zingerman r3 *= -1; \
376*ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
377*ade3f08fSEduard Zingerman r2 -= r3; \
378*ade3f08fSEduard Zingerman r2 |= r3; \
379*ade3f08fSEduard Zingerman r2 = -r2; \
380*ade3f08fSEduard Zingerman r2 s>>= 63; \
381*ade3f08fSEduard Zingerman r3 &= r2; \
382*ade3f08fSEduard Zingerman r0 = r3; \
383*ade3f08fSEduard Zingerman exit; \
384*ade3f08fSEduard Zingerman " :
385*ade3f08fSEduard Zingerman : __imm_const(__imm_0, 47 - 1)
386*ade3f08fSEduard Zingerman : __clobber_all);
387*ade3f08fSEduard Zingerman }
388*ade3f08fSEduard Zingerman
389*ade3f08fSEduard Zingerman SEC("socket")
390*ade3f08fSEduard Zingerman __description("masking, test in bounds 8")
391*ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
masking_test_in_bounds_8(void)392*ade3f08fSEduard Zingerman __naked void masking_test_in_bounds_8(void)
393*ade3f08fSEduard Zingerman {
394*ade3f08fSEduard Zingerman asm volatile (" \
395*ade3f08fSEduard Zingerman r3 = -47; \
396*ade3f08fSEduard Zingerman r3 *= -1; \
397*ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
398*ade3f08fSEduard Zingerman r2 -= r3; \
399*ade3f08fSEduard Zingerman r2 |= r3; \
400*ade3f08fSEduard Zingerman r2 = -r2; \
401*ade3f08fSEduard Zingerman r2 s>>= 63; \
402*ade3f08fSEduard Zingerman r3 &= r2; \
403*ade3f08fSEduard Zingerman r0 = r3; \
404*ade3f08fSEduard Zingerman exit; \
405*ade3f08fSEduard Zingerman " :
406*ade3f08fSEduard Zingerman : __imm_const(__imm_0, 47 - 1)
407*ade3f08fSEduard Zingerman : __clobber_all);
408*ade3f08fSEduard Zingerman }
409*ade3f08fSEduard Zingerman
410*ade3f08fSEduard Zingerman char _license[] SEC("license") = "GPL";
411