1aec08d67SYonghong Song // SPDX-License-Identifier: GPL-2.0
2aec08d67SYonghong Song
3aec08d67SYonghong Song #include <linux/bpf.h>
4aec08d67SYonghong Song #include <bpf/bpf_helpers.h>
5aec08d67SYonghong Song #include "bpf_misc.h"
6aec08d67SYonghong Song
7aec08d67SYonghong Song SEC("socket")
8aec08d67SYonghong Song __description("check deducing bounds from non-const, jmp64, <non_const> == <const>, 1")
9aec08d67SYonghong Song __success __retval(0)
deducing_bounds_from_non_const_1(void)10aec08d67SYonghong Song __naked void deducing_bounds_from_non_const_1(void)
11aec08d67SYonghong Song {
12aec08d67SYonghong Song asm volatile (" \
13aec08d67SYonghong Song call %[bpf_ktime_get_ns]; \
14aec08d67SYonghong Song if r0 < 3 goto l0_%=; \
15aec08d67SYonghong Song r2 = 2; \
16aec08d67SYonghong Song if r0 == r2 goto l1_%=; \
17aec08d67SYonghong Song l0_%=: \
18aec08d67SYonghong Song r0 = 0; \
19aec08d67SYonghong Song exit; \
20aec08d67SYonghong Song l1_%=: \
21aec08d67SYonghong Song r0 -= r1; \
22aec08d67SYonghong Song exit; \
23aec08d67SYonghong Song " :
24aec08d67SYonghong Song : __imm(bpf_ktime_get_ns)
25aec08d67SYonghong Song : __clobber_all);
26aec08d67SYonghong Song }
27aec08d67SYonghong Song
28aec08d67SYonghong Song SEC("socket")
29aec08d67SYonghong Song __description("check deducing bounds from non-const, jmp64, <non_const> == <const>, 2")
30aec08d67SYonghong Song __success __retval(0)
deducing_bounds_from_non_const_2(void)31aec08d67SYonghong Song __naked void deducing_bounds_from_non_const_2(void)
32aec08d67SYonghong Song {
33aec08d67SYonghong Song asm volatile (" \
34aec08d67SYonghong Song call %[bpf_ktime_get_ns]; \
35aec08d67SYonghong Song if r0 > 3 goto l0_%=; \
36aec08d67SYonghong Song r2 = 4; \
37aec08d67SYonghong Song if r0 == r2 goto l1_%=; \
38aec08d67SYonghong Song l0_%=: \
39aec08d67SYonghong Song r0 = 0; \
40aec08d67SYonghong Song exit; \
41aec08d67SYonghong Song l1_%=: \
42aec08d67SYonghong Song r0 -= r1; \
43aec08d67SYonghong Song exit; \
44aec08d67SYonghong Song " :
45aec08d67SYonghong Song : __imm(bpf_ktime_get_ns)
46aec08d67SYonghong Song : __clobber_all);
47aec08d67SYonghong Song }
48aec08d67SYonghong Song
49aec08d67SYonghong Song SEC("socket")
50aec08d67SYonghong Song __description("check deducing bounds from non-const, jmp64, <non_const> != <const>, 1")
51aec08d67SYonghong Song __success __retval(0)
deducing_bounds_from_non_const_3(void)52aec08d67SYonghong Song __naked void deducing_bounds_from_non_const_3(void)
53aec08d67SYonghong Song {
54aec08d67SYonghong Song asm volatile (" \
55aec08d67SYonghong Song call %[bpf_ktime_get_ns]; \
56aec08d67SYonghong Song if r0 < 3 goto l0_%=; \
57aec08d67SYonghong Song r2 = 2; \
58aec08d67SYonghong Song if r0 != r2 goto l0_%=; \
59aec08d67SYonghong Song goto l1_%=; \
60aec08d67SYonghong Song l0_%=: \
61aec08d67SYonghong Song r0 = 0; \
62aec08d67SYonghong Song exit; \
63aec08d67SYonghong Song l1_%=: \
64aec08d67SYonghong Song r0 -= r1; \
65aec08d67SYonghong Song exit; \
66aec08d67SYonghong Song " :
67aec08d67SYonghong Song : __imm(bpf_ktime_get_ns)
68aec08d67SYonghong Song : __clobber_all);
69aec08d67SYonghong Song }
70aec08d67SYonghong Song
71aec08d67SYonghong Song SEC("socket")
72aec08d67SYonghong Song __description("check deducing bounds from non-const, jmp64, <non_const> != <const>, 2")
73aec08d67SYonghong Song __success __retval(0)
deducing_bounds_from_non_const_4(void)74aec08d67SYonghong Song __naked void deducing_bounds_from_non_const_4(void)
75aec08d67SYonghong Song {
76aec08d67SYonghong Song asm volatile (" \
77aec08d67SYonghong Song call %[bpf_ktime_get_ns]; \
78aec08d67SYonghong Song if r0 > 3 goto l0_%=; \
79aec08d67SYonghong Song r2 = 4; \
80aec08d67SYonghong Song if r0 != r2 goto l0_%=; \
81aec08d67SYonghong Song goto l1_%=; \
82aec08d67SYonghong Song l0_%=: \
83aec08d67SYonghong Song r0 = 0; \
84aec08d67SYonghong Song exit; \
85aec08d67SYonghong Song l1_%=: \
86aec08d67SYonghong Song r0 -= r1; \
87aec08d67SYonghong Song exit; \
88aec08d67SYonghong Song " :
89aec08d67SYonghong Song : __imm(bpf_ktime_get_ns)
90aec08d67SYonghong Song : __clobber_all);
91aec08d67SYonghong Song }
92aec08d67SYonghong Song
93aec08d67SYonghong Song SEC("socket")
94aec08d67SYonghong Song __description("check deducing bounds from non-const, jmp32, <non_const> == <const>, 1")
95aec08d67SYonghong Song __success __retval(0)
deducing_bounds_from_non_const_5(void)96aec08d67SYonghong Song __naked void deducing_bounds_from_non_const_5(void)
97aec08d67SYonghong Song {
98aec08d67SYonghong Song asm volatile (" \
99aec08d67SYonghong Song call %[bpf_ktime_get_ns]; \
100aec08d67SYonghong Song if w0 < 4 goto l0_%=; \
101aec08d67SYonghong Song w2 = 3; \
102aec08d67SYonghong Song if w0 == w2 goto l1_%=; \
103aec08d67SYonghong Song l0_%=: \
104aec08d67SYonghong Song r0 = 0; \
105aec08d67SYonghong Song exit; \
106aec08d67SYonghong Song l1_%=: \
107aec08d67SYonghong Song r0 -= r1; \
108aec08d67SYonghong Song exit; \
109aec08d67SYonghong Song " :
110aec08d67SYonghong Song : __imm(bpf_ktime_get_ns)
111aec08d67SYonghong Song : __clobber_all);
112aec08d67SYonghong Song }
113aec08d67SYonghong Song
114aec08d67SYonghong Song SEC("socket")
115aec08d67SYonghong Song __description("check deducing bounds from non-const, jmp32, <non_const> == <const>, 2")
116aec08d67SYonghong Song __success __retval(0)
deducing_bounds_from_non_const_6(void)117aec08d67SYonghong Song __naked void deducing_bounds_from_non_const_6(void)
118aec08d67SYonghong Song {
119aec08d67SYonghong Song asm volatile (" \
120aec08d67SYonghong Song call %[bpf_ktime_get_ns]; \
121aec08d67SYonghong Song if w0 > 4 goto l0_%=; \
122aec08d67SYonghong Song w2 = 5; \
123aec08d67SYonghong Song if w0 == w2 goto l1_%=; \
124aec08d67SYonghong Song l0_%=: \
125aec08d67SYonghong Song r0 = 0; \
126aec08d67SYonghong Song exit; \
127aec08d67SYonghong Song l1_%=: \
128aec08d67SYonghong Song r0 -= r1; \
129aec08d67SYonghong Song exit; \
130aec08d67SYonghong Song " :
131aec08d67SYonghong Song : __imm(bpf_ktime_get_ns)
132aec08d67SYonghong Song : __clobber_all);
133aec08d67SYonghong Song }
134aec08d67SYonghong Song
135aec08d67SYonghong Song SEC("socket")
136aec08d67SYonghong Song __description("check deducing bounds from non-const, jmp32, <non_const> != <const>, 1")
137aec08d67SYonghong Song __success __retval(0)
deducing_bounds_from_non_const_7(void)138aec08d67SYonghong Song __naked void deducing_bounds_from_non_const_7(void)
139aec08d67SYonghong Song {
140aec08d67SYonghong Song asm volatile (" \
141aec08d67SYonghong Song call %[bpf_ktime_get_ns]; \
142aec08d67SYonghong Song if w0 < 3 goto l0_%=; \
143aec08d67SYonghong Song w2 = 2; \
144aec08d67SYonghong Song if w0 != w2 goto l0_%=; \
145aec08d67SYonghong Song goto l1_%=; \
146aec08d67SYonghong Song l0_%=: \
147aec08d67SYonghong Song r0 = 0; \
148aec08d67SYonghong Song exit; \
149aec08d67SYonghong Song l1_%=: \
150aec08d67SYonghong Song r0 -= r1; \
151aec08d67SYonghong Song exit; \
152aec08d67SYonghong Song " :
153aec08d67SYonghong Song : __imm(bpf_ktime_get_ns)
154aec08d67SYonghong Song : __clobber_all);
155aec08d67SYonghong Song }
156aec08d67SYonghong Song
157aec08d67SYonghong Song SEC("socket")
158aec08d67SYonghong Song __description("check deducing bounds from non-const, jmp32, <non_const> != <const>, 2")
159aec08d67SYonghong Song __success __retval(0)
deducing_bounds_from_non_const_8(void)160aec08d67SYonghong Song __naked void deducing_bounds_from_non_const_8(void)
161aec08d67SYonghong Song {
162aec08d67SYonghong Song asm volatile (" \
163aec08d67SYonghong Song call %[bpf_ktime_get_ns]; \
164aec08d67SYonghong Song if w0 > 3 goto l0_%=; \
165aec08d67SYonghong Song w2 = 4; \
166aec08d67SYonghong Song if w0 != w2 goto l0_%=; \
167aec08d67SYonghong Song goto l1_%=; \
168aec08d67SYonghong Song l0_%=: \
169aec08d67SYonghong Song r0 = 0; \
170aec08d67SYonghong Song exit; \
171aec08d67SYonghong Song l1_%=: \
172aec08d67SYonghong Song r0 -= r1; \
173aec08d67SYonghong Song exit; \
174aec08d67SYonghong Song " :
175aec08d67SYonghong Song : __imm(bpf_ktime_get_ns)
176aec08d67SYonghong Song : __clobber_all);
177aec08d67SYonghong Song }
178aec08d67SYonghong Song
179*23a88faeSYonghong Song SEC("socket")
180*23a88faeSYonghong Song __description("check deducing bounds from non-const, jmp64, <const> > <non_const>, 1")
181*23a88faeSYonghong Song __success __retval(0)
deducing_bounds_from_non_const_9(void)182*23a88faeSYonghong Song __naked void deducing_bounds_from_non_const_9(void)
183*23a88faeSYonghong Song {
184*23a88faeSYonghong Song asm volatile (" \
185*23a88faeSYonghong Song call %[bpf_ktime_get_ns]; \
186*23a88faeSYonghong Song r2 = 0; \
187*23a88faeSYonghong Song if r2 > r0 goto l0_%=; \
188*23a88faeSYonghong Song r0 = 0; \
189*23a88faeSYonghong Song exit; \
190*23a88faeSYonghong Song l0_%=: \
191*23a88faeSYonghong Song r0 -= r1; \
192*23a88faeSYonghong Song exit; \
193*23a88faeSYonghong Song " :
194*23a88faeSYonghong Song : __imm(bpf_ktime_get_ns)
195*23a88faeSYonghong Song : __clobber_all);
196*23a88faeSYonghong Song }
197*23a88faeSYonghong Song
198*23a88faeSYonghong Song SEC("socket")
199*23a88faeSYonghong Song __description("check deducing bounds from non-const, jmp64, <const> > <non_const>, 2")
200*23a88faeSYonghong Song __success __retval(0)
deducing_bounds_from_non_const_10(void)201*23a88faeSYonghong Song __naked void deducing_bounds_from_non_const_10(void)
202*23a88faeSYonghong Song {
203*23a88faeSYonghong Song asm volatile (" \
204*23a88faeSYonghong Song call %[bpf_ktime_get_ns]; \
205*23a88faeSYonghong Song if r0 < 4 goto l0_%=; \
206*23a88faeSYonghong Song r2 = 4; \
207*23a88faeSYonghong Song if r2 > r0 goto l1_%=; \
208*23a88faeSYonghong Song l0_%=: \
209*23a88faeSYonghong Song r0 = 0; \
210*23a88faeSYonghong Song exit; \
211*23a88faeSYonghong Song l1_%=: \
212*23a88faeSYonghong Song r0 -= r1; \
213*23a88faeSYonghong Song exit; \
214*23a88faeSYonghong Song " :
215*23a88faeSYonghong Song : __imm(bpf_ktime_get_ns)
216*23a88faeSYonghong Song : __clobber_all);
217*23a88faeSYonghong Song }
218*23a88faeSYonghong Song
219*23a88faeSYonghong Song SEC("socket")
220*23a88faeSYonghong Song __description("check deducing bounds from non-const, jmp64, <const> >= <non_const>")
221*23a88faeSYonghong Song __success __retval(0)
deducing_bounds_from_non_const_11(void)222*23a88faeSYonghong Song __naked void deducing_bounds_from_non_const_11(void)
223*23a88faeSYonghong Song {
224*23a88faeSYonghong Song asm volatile (" \
225*23a88faeSYonghong Song call %[bpf_ktime_get_ns]; \
226*23a88faeSYonghong Song if r0 < 4 goto l0_%=; \
227*23a88faeSYonghong Song r2 = 3; \
228*23a88faeSYonghong Song if r2 >= r0 goto l1_%=; \
229*23a88faeSYonghong Song l0_%=: \
230*23a88faeSYonghong Song r0 = 0; \
231*23a88faeSYonghong Song exit; \
232*23a88faeSYonghong Song l1_%=: \
233*23a88faeSYonghong Song r0 -= r1; \
234*23a88faeSYonghong Song exit; \
235*23a88faeSYonghong Song " :
236*23a88faeSYonghong Song : __imm(bpf_ktime_get_ns)
237*23a88faeSYonghong Song : __clobber_all);
238*23a88faeSYonghong Song }
239*23a88faeSYonghong Song
240*23a88faeSYonghong Song SEC("socket")
241*23a88faeSYonghong Song __description("check deducing bounds from non-const, jmp64, <const> < <non_const>")
242*23a88faeSYonghong Song __success __retval(0)
deducing_bounds_from_non_const_12(void)243*23a88faeSYonghong Song __naked void deducing_bounds_from_non_const_12(void)
244*23a88faeSYonghong Song {
245*23a88faeSYonghong Song asm volatile (" \
246*23a88faeSYonghong Song call %[bpf_ktime_get_ns]; \
247*23a88faeSYonghong Song if r0 > 4 goto l0_%=; \
248*23a88faeSYonghong Song r2 = 4; \
249*23a88faeSYonghong Song if r2 < r0 goto l1_%=; \
250*23a88faeSYonghong Song l0_%=: \
251*23a88faeSYonghong Song r0 = 0; \
252*23a88faeSYonghong Song exit; \
253*23a88faeSYonghong Song l1_%=: \
254*23a88faeSYonghong Song r0 -= r1; \
255*23a88faeSYonghong Song exit; \
256*23a88faeSYonghong Song " :
257*23a88faeSYonghong Song : __imm(bpf_ktime_get_ns)
258*23a88faeSYonghong Song : __clobber_all);
259*23a88faeSYonghong Song }
260*23a88faeSYonghong Song
261*23a88faeSYonghong Song SEC("socket")
262*23a88faeSYonghong Song __description("check deducing bounds from non-const, jmp64, <const> <= <non_const>")
263*23a88faeSYonghong Song __success __retval(0)
deducing_bounds_from_non_const_13(void)264*23a88faeSYonghong Song __naked void deducing_bounds_from_non_const_13(void)
265*23a88faeSYonghong Song {
266*23a88faeSYonghong Song asm volatile (" \
267*23a88faeSYonghong Song call %[bpf_ktime_get_ns]; \
268*23a88faeSYonghong Song if r0 >= 4 goto l0_%=; \
269*23a88faeSYonghong Song r2 = 4; \
270*23a88faeSYonghong Song if r2 <= r0 goto l1_%=; \
271*23a88faeSYonghong Song l0_%=: \
272*23a88faeSYonghong Song r0 = 0; \
273*23a88faeSYonghong Song exit; \
274*23a88faeSYonghong Song l1_%=: \
275*23a88faeSYonghong Song r0 -= r1; \
276*23a88faeSYonghong Song exit; \
277*23a88faeSYonghong Song " :
278*23a88faeSYonghong Song : __imm(bpf_ktime_get_ns)
279*23a88faeSYonghong Song : __clobber_all);
280*23a88faeSYonghong Song }
281*23a88faeSYonghong Song
282*23a88faeSYonghong Song SEC("socket")
283*23a88faeSYonghong Song __description("check deducing bounds from non-const, jmp64, <const> == <non_const>")
284*23a88faeSYonghong Song __success __retval(0)
deducing_bounds_from_non_const_14(void)285*23a88faeSYonghong Song __naked void deducing_bounds_from_non_const_14(void)
286*23a88faeSYonghong Song {
287*23a88faeSYonghong Song asm volatile (" \
288*23a88faeSYonghong Song call %[bpf_ktime_get_ns]; \
289*23a88faeSYonghong Song if r0 < 3 goto l0_%=; \
290*23a88faeSYonghong Song r2 = 2; \
291*23a88faeSYonghong Song if r2 == r0 goto l1_%=; \
292*23a88faeSYonghong Song l0_%=: \
293*23a88faeSYonghong Song r0 = 0; \
294*23a88faeSYonghong Song exit; \
295*23a88faeSYonghong Song l1_%=: \
296*23a88faeSYonghong Song r0 -= r1; \
297*23a88faeSYonghong Song exit; \
298*23a88faeSYonghong Song " :
299*23a88faeSYonghong Song : __imm(bpf_ktime_get_ns)
300*23a88faeSYonghong Song : __clobber_all);
301*23a88faeSYonghong Song }
302*23a88faeSYonghong Song
303*23a88faeSYonghong Song SEC("socket")
304*23a88faeSYonghong Song __description("check deducing bounds from non-const, jmp64, <const> s> <non_const>")
305*23a88faeSYonghong Song __success __retval(0)
deducing_bounds_from_non_const_15(void)306*23a88faeSYonghong Song __naked void deducing_bounds_from_non_const_15(void)
307*23a88faeSYonghong Song {
308*23a88faeSYonghong Song asm volatile (" \
309*23a88faeSYonghong Song call %[bpf_ktime_get_ns]; \
310*23a88faeSYonghong Song if r0 s< 4 goto l0_%=; \
311*23a88faeSYonghong Song r2 = 4; \
312*23a88faeSYonghong Song if r2 s> r0 goto l1_%=; \
313*23a88faeSYonghong Song l0_%=: \
314*23a88faeSYonghong Song r0 = 0; \
315*23a88faeSYonghong Song exit; \
316*23a88faeSYonghong Song l1_%=: \
317*23a88faeSYonghong Song r0 -= r1; \
318*23a88faeSYonghong Song exit; \
319*23a88faeSYonghong Song " :
320*23a88faeSYonghong Song : __imm(bpf_ktime_get_ns)
321*23a88faeSYonghong Song : __clobber_all);
322*23a88faeSYonghong Song }
323*23a88faeSYonghong Song
324*23a88faeSYonghong Song SEC("socket")
325*23a88faeSYonghong Song __description("check deducing bounds from non-const, jmp64, <const> s>= <non_const>")
326*23a88faeSYonghong Song __success __retval(0)
deducing_bounds_from_non_const_16(void)327*23a88faeSYonghong Song __naked void deducing_bounds_from_non_const_16(void)
328*23a88faeSYonghong Song {
329*23a88faeSYonghong Song asm volatile (" \
330*23a88faeSYonghong Song call %[bpf_ktime_get_ns]; \
331*23a88faeSYonghong Song if r0 s< 4 goto l0_%=; \
332*23a88faeSYonghong Song r2 = 3; \
333*23a88faeSYonghong Song if r2 s>= r0 goto l1_%=; \
334*23a88faeSYonghong Song l0_%=: \
335*23a88faeSYonghong Song r0 = 0; \
336*23a88faeSYonghong Song exit; \
337*23a88faeSYonghong Song l1_%=: \
338*23a88faeSYonghong Song r0 -= r1; \
339*23a88faeSYonghong Song exit; \
340*23a88faeSYonghong Song " :
341*23a88faeSYonghong Song : __imm(bpf_ktime_get_ns)
342*23a88faeSYonghong Song : __clobber_all);
343*23a88faeSYonghong Song }
344*23a88faeSYonghong Song
345*23a88faeSYonghong Song SEC("socket")
346*23a88faeSYonghong Song __description("check deducing bounds from non-const, jmp64, <const> s< <non_const>")
347*23a88faeSYonghong Song __success __retval(0)
deducing_bounds_from_non_const_17(void)348*23a88faeSYonghong Song __naked void deducing_bounds_from_non_const_17(void)
349*23a88faeSYonghong Song {
350*23a88faeSYonghong Song asm volatile (" \
351*23a88faeSYonghong Song call %[bpf_ktime_get_ns]; \
352*23a88faeSYonghong Song if r0 s> 4 goto l0_%=; \
353*23a88faeSYonghong Song r2 = 4; \
354*23a88faeSYonghong Song if r2 s< r0 goto l1_%=; \
355*23a88faeSYonghong Song l0_%=: \
356*23a88faeSYonghong Song r0 = 0; \
357*23a88faeSYonghong Song exit; \
358*23a88faeSYonghong Song l1_%=: \
359*23a88faeSYonghong Song r0 -= r1; \
360*23a88faeSYonghong Song exit; \
361*23a88faeSYonghong Song " :
362*23a88faeSYonghong Song : __imm(bpf_ktime_get_ns)
363*23a88faeSYonghong Song : __clobber_all);
364*23a88faeSYonghong Song }
365*23a88faeSYonghong Song
366*23a88faeSYonghong Song SEC("socket")
367*23a88faeSYonghong Song __description("check deducing bounds from non-const, jmp64, <const> s<= <non_const>")
368*23a88faeSYonghong Song __success __retval(0)
deducing_bounds_from_non_const_18(void)369*23a88faeSYonghong Song __naked void deducing_bounds_from_non_const_18(void)
370*23a88faeSYonghong Song {
371*23a88faeSYonghong Song asm volatile (" \
372*23a88faeSYonghong Song call %[bpf_ktime_get_ns]; \
373*23a88faeSYonghong Song if r0 s> 4 goto l0_%=; \
374*23a88faeSYonghong Song r2 = 5; \
375*23a88faeSYonghong Song if r2 s<= r0 goto l1_%=; \
376*23a88faeSYonghong Song l0_%=: \
377*23a88faeSYonghong Song r0 = 0; \
378*23a88faeSYonghong Song exit; \
379*23a88faeSYonghong Song l1_%=: \
380*23a88faeSYonghong Song r0 -= r1; \
381*23a88faeSYonghong Song exit; \
382*23a88faeSYonghong Song " :
383*23a88faeSYonghong Song : __imm(bpf_ktime_get_ns)
384*23a88faeSYonghong Song : __clobber_all);
385*23a88faeSYonghong Song }
386*23a88faeSYonghong Song
387*23a88faeSYonghong Song SEC("socket")
388*23a88faeSYonghong Song __description("check deducing bounds from non-const, jmp64, <const> != <non_const>")
389*23a88faeSYonghong Song __success __retval(0)
deducing_bounds_from_non_const_19(void)390*23a88faeSYonghong Song __naked void deducing_bounds_from_non_const_19(void)
391*23a88faeSYonghong Song {
392*23a88faeSYonghong Song asm volatile (" \
393*23a88faeSYonghong Song call %[bpf_ktime_get_ns]; \
394*23a88faeSYonghong Song if r0 < 3 goto l0_%=; \
395*23a88faeSYonghong Song r2 = 2; \
396*23a88faeSYonghong Song if r2 != r0 goto l0_%=; \
397*23a88faeSYonghong Song goto l1_%=; \
398*23a88faeSYonghong Song l0_%=: \
399*23a88faeSYonghong Song r0 = 0; \
400*23a88faeSYonghong Song exit; \
401*23a88faeSYonghong Song l1_%=: \
402*23a88faeSYonghong Song r0 -= r1; \
403*23a88faeSYonghong Song exit; \
404*23a88faeSYonghong Song " :
405*23a88faeSYonghong Song : __imm(bpf_ktime_get_ns)
406*23a88faeSYonghong Song : __clobber_all);
407*23a88faeSYonghong Song }
408*23a88faeSYonghong Song
409*23a88faeSYonghong Song SEC("socket")
410*23a88faeSYonghong Song __description("check deducing bounds from non-const, jmp32, <const> > <non_const>, 1")
411*23a88faeSYonghong Song __success __retval(0)
deducing_bounds_from_non_const_20(void)412*23a88faeSYonghong Song __naked void deducing_bounds_from_non_const_20(void)
413*23a88faeSYonghong Song {
414*23a88faeSYonghong Song asm volatile (" \
415*23a88faeSYonghong Song call %[bpf_ktime_get_ns]; \
416*23a88faeSYonghong Song w2 = 0; \
417*23a88faeSYonghong Song if w2 > w0 goto l0_%=; \
418*23a88faeSYonghong Song r0 = 0; \
419*23a88faeSYonghong Song exit; \
420*23a88faeSYonghong Song l0_%=: \
421*23a88faeSYonghong Song r0 -= r1; \
422*23a88faeSYonghong Song exit; \
423*23a88faeSYonghong Song " :
424*23a88faeSYonghong Song : __imm(bpf_ktime_get_ns)
425*23a88faeSYonghong Song : __clobber_all);
426*23a88faeSYonghong Song }
427*23a88faeSYonghong Song
428*23a88faeSYonghong Song SEC("socket")
429*23a88faeSYonghong Song __description("check deducing bounds from non-const, jmp32, <const> > <non_const>, 2")
430*23a88faeSYonghong Song __success __retval(0)
deducing_bounds_from_non_const_21(void)431*23a88faeSYonghong Song __naked void deducing_bounds_from_non_const_21(void)
432*23a88faeSYonghong Song {
433*23a88faeSYonghong Song asm volatile (" \
434*23a88faeSYonghong Song call %[bpf_ktime_get_ns]; \
435*23a88faeSYonghong Song if w0 < 4 goto l0_%=; \
436*23a88faeSYonghong Song w2 = 4; \
437*23a88faeSYonghong Song if w2 > w0 goto l1_%=; \
438*23a88faeSYonghong Song l0_%=: \
439*23a88faeSYonghong Song r0 = 0; \
440*23a88faeSYonghong Song exit; \
441*23a88faeSYonghong Song l1_%=: \
442*23a88faeSYonghong Song r0 -= r1; \
443*23a88faeSYonghong Song exit; \
444*23a88faeSYonghong Song " :
445*23a88faeSYonghong Song : __imm(bpf_ktime_get_ns)
446*23a88faeSYonghong Song : __clobber_all);
447*23a88faeSYonghong Song }
448*23a88faeSYonghong Song
449*23a88faeSYonghong Song SEC("socket")
450*23a88faeSYonghong Song __description("check deducing bounds from non-const, jmp32, <const> >= <non_const>")
451*23a88faeSYonghong Song __success __retval(0)
deducing_bounds_from_non_const_22(void)452*23a88faeSYonghong Song __naked void deducing_bounds_from_non_const_22(void)
453*23a88faeSYonghong Song {
454*23a88faeSYonghong Song asm volatile (" \
455*23a88faeSYonghong Song call %[bpf_ktime_get_ns]; \
456*23a88faeSYonghong Song if w0 < 4 goto l0_%=; \
457*23a88faeSYonghong Song w2 = 3; \
458*23a88faeSYonghong Song if w2 >= w0 goto l1_%=; \
459*23a88faeSYonghong Song l0_%=: \
460*23a88faeSYonghong Song r0 = 0; \
461*23a88faeSYonghong Song exit; \
462*23a88faeSYonghong Song l1_%=: \
463*23a88faeSYonghong Song r0 -= r1; \
464*23a88faeSYonghong Song exit; \
465*23a88faeSYonghong Song " :
466*23a88faeSYonghong Song : __imm(bpf_ktime_get_ns)
467*23a88faeSYonghong Song : __clobber_all);
468*23a88faeSYonghong Song }
469*23a88faeSYonghong Song
470*23a88faeSYonghong Song SEC("socket")
471*23a88faeSYonghong Song __description("check deducing bounds from non-const, jmp32, <const> < <non_const>")
472*23a88faeSYonghong Song __success __retval(0)
deducing_bounds_from_non_const_23(void)473*23a88faeSYonghong Song __naked void deducing_bounds_from_non_const_23(void)
474*23a88faeSYonghong Song {
475*23a88faeSYonghong Song asm volatile (" \
476*23a88faeSYonghong Song call %[bpf_ktime_get_ns]; \
477*23a88faeSYonghong Song if w0 > 4 goto l0_%=; \
478*23a88faeSYonghong Song w2 = 4; \
479*23a88faeSYonghong Song if w2 < w0 goto l1_%=; \
480*23a88faeSYonghong Song l0_%=: \
481*23a88faeSYonghong Song r0 = 0; \
482*23a88faeSYonghong Song exit; \
483*23a88faeSYonghong Song l1_%=: \
484*23a88faeSYonghong Song r0 -= r1; \
485*23a88faeSYonghong Song exit; \
486*23a88faeSYonghong Song " :
487*23a88faeSYonghong Song : __imm(bpf_ktime_get_ns)
488*23a88faeSYonghong Song : __clobber_all);
489*23a88faeSYonghong Song }
490*23a88faeSYonghong Song
491*23a88faeSYonghong Song SEC("socket")
492*23a88faeSYonghong Song __description("check deducing bounds from non-const, jmp32, <const> <= <non_const>")
493*23a88faeSYonghong Song __success __retval(0)
deducing_bounds_from_non_const_24(void)494*23a88faeSYonghong Song __naked void deducing_bounds_from_non_const_24(void)
495*23a88faeSYonghong Song {
496*23a88faeSYonghong Song asm volatile (" \
497*23a88faeSYonghong Song call %[bpf_ktime_get_ns]; \
498*23a88faeSYonghong Song if w0 >= 4 goto l0_%=; \
499*23a88faeSYonghong Song w2 = 4; \
500*23a88faeSYonghong Song if w2 <= w0 goto l1_%=; \
501*23a88faeSYonghong Song l0_%=: \
502*23a88faeSYonghong Song r0 = 0; \
503*23a88faeSYonghong Song exit; \
504*23a88faeSYonghong Song l1_%=: \
505*23a88faeSYonghong Song r0 -= r1; \
506*23a88faeSYonghong Song exit; \
507*23a88faeSYonghong Song " :
508*23a88faeSYonghong Song : __imm(bpf_ktime_get_ns)
509*23a88faeSYonghong Song : __clobber_all);
510*23a88faeSYonghong Song }
511*23a88faeSYonghong Song
512*23a88faeSYonghong Song SEC("socket")
513*23a88faeSYonghong Song __description("check deducing bounds from non-const, jmp32, <const> == <non_const>")
514*23a88faeSYonghong Song __success __retval(0)
deducing_bounds_from_non_const_25(void)515*23a88faeSYonghong Song __naked void deducing_bounds_from_non_const_25(void)
516*23a88faeSYonghong Song {
517*23a88faeSYonghong Song asm volatile (" \
518*23a88faeSYonghong Song call %[bpf_ktime_get_ns]; \
519*23a88faeSYonghong Song if w0 < 4 goto l0_%=; \
520*23a88faeSYonghong Song w2 = 3; \
521*23a88faeSYonghong Song if w2 == w0 goto l1_%=; \
522*23a88faeSYonghong Song l0_%=: \
523*23a88faeSYonghong Song r0 = 0; \
524*23a88faeSYonghong Song exit; \
525*23a88faeSYonghong Song l1_%=: \
526*23a88faeSYonghong Song r0 -= r1; \
527*23a88faeSYonghong Song exit; \
528*23a88faeSYonghong Song " :
529*23a88faeSYonghong Song : __imm(bpf_ktime_get_ns)
530*23a88faeSYonghong Song : __clobber_all);
531*23a88faeSYonghong Song }
532*23a88faeSYonghong Song
533*23a88faeSYonghong Song SEC("socket")
534*23a88faeSYonghong Song __description("check deducing bounds from non-const, jmp32, <const> s> <non_const>")
535*23a88faeSYonghong Song __success __retval(0)
deducing_bounds_from_non_const_26(void)536*23a88faeSYonghong Song __naked void deducing_bounds_from_non_const_26(void)
537*23a88faeSYonghong Song {
538*23a88faeSYonghong Song asm volatile (" \
539*23a88faeSYonghong Song call %[bpf_ktime_get_ns]; \
540*23a88faeSYonghong Song if w0 s< 4 goto l0_%=; \
541*23a88faeSYonghong Song w2 = 4; \
542*23a88faeSYonghong Song if w2 s> w0 goto l1_%=; \
543*23a88faeSYonghong Song l0_%=: \
544*23a88faeSYonghong Song r0 = 0; \
545*23a88faeSYonghong Song exit; \
546*23a88faeSYonghong Song l1_%=: \
547*23a88faeSYonghong Song r0 -= r1; \
548*23a88faeSYonghong Song exit; \
549*23a88faeSYonghong Song " :
550*23a88faeSYonghong Song : __imm(bpf_ktime_get_ns)
551*23a88faeSYonghong Song : __clobber_all);
552*23a88faeSYonghong Song }
553*23a88faeSYonghong Song
554*23a88faeSYonghong Song SEC("socket")
555*23a88faeSYonghong Song __description("check deducing bounds from non-const, jmp32, <const> s>= <non_const>")
556*23a88faeSYonghong Song __success __retval(0)
deducing_bounds_from_non_const_27(void)557*23a88faeSYonghong Song __naked void deducing_bounds_from_non_const_27(void)
558*23a88faeSYonghong Song {
559*23a88faeSYonghong Song asm volatile (" \
560*23a88faeSYonghong Song call %[bpf_ktime_get_ns]; \
561*23a88faeSYonghong Song if w0 s< 4 goto l0_%=; \
562*23a88faeSYonghong Song w2 = 3; \
563*23a88faeSYonghong Song if w2 s>= w0 goto l1_%=; \
564*23a88faeSYonghong Song l0_%=: \
565*23a88faeSYonghong Song r0 = 0; \
566*23a88faeSYonghong Song exit; \
567*23a88faeSYonghong Song l1_%=: \
568*23a88faeSYonghong Song r0 -= r1; \
569*23a88faeSYonghong Song exit; \
570*23a88faeSYonghong Song " :
571*23a88faeSYonghong Song : __imm(bpf_ktime_get_ns)
572*23a88faeSYonghong Song : __clobber_all);
573*23a88faeSYonghong Song }
574*23a88faeSYonghong Song
575*23a88faeSYonghong Song SEC("socket")
576*23a88faeSYonghong Song __description("check deducing bounds from non-const, jmp32, <const> s< <non_const>")
577*23a88faeSYonghong Song __success __retval(0)
deducing_bounds_from_non_const_28(void)578*23a88faeSYonghong Song __naked void deducing_bounds_from_non_const_28(void)
579*23a88faeSYonghong Song {
580*23a88faeSYonghong Song asm volatile (" \
581*23a88faeSYonghong Song call %[bpf_ktime_get_ns]; \
582*23a88faeSYonghong Song if w0 s> 4 goto l0_%=; \
583*23a88faeSYonghong Song w2 = 5; \
584*23a88faeSYonghong Song if w2 s< w0 goto l1_%=; \
585*23a88faeSYonghong Song l0_%=: \
586*23a88faeSYonghong Song r0 = 0; \
587*23a88faeSYonghong Song exit; \
588*23a88faeSYonghong Song l1_%=: \
589*23a88faeSYonghong Song r0 -= r1; \
590*23a88faeSYonghong Song exit; \
591*23a88faeSYonghong Song " :
592*23a88faeSYonghong Song : __imm(bpf_ktime_get_ns)
593*23a88faeSYonghong Song : __clobber_all);
594*23a88faeSYonghong Song }
595*23a88faeSYonghong Song
596*23a88faeSYonghong Song SEC("socket")
597*23a88faeSYonghong Song __description("check deducing bounds from non-const, jmp32, <const> s<= <non_const>")
598*23a88faeSYonghong Song __success __retval(0)
deducing_bounds_from_non_const_29(void)599*23a88faeSYonghong Song __naked void deducing_bounds_from_non_const_29(void)
600*23a88faeSYonghong Song {
601*23a88faeSYonghong Song asm volatile (" \
602*23a88faeSYonghong Song call %[bpf_ktime_get_ns]; \
603*23a88faeSYonghong Song if w0 s>= 4 goto l0_%=; \
604*23a88faeSYonghong Song w2 = 4; \
605*23a88faeSYonghong Song if w2 s<= w0 goto l1_%=; \
606*23a88faeSYonghong Song l0_%=: \
607*23a88faeSYonghong Song r0 = 0; \
608*23a88faeSYonghong Song exit; \
609*23a88faeSYonghong Song l1_%=: \
610*23a88faeSYonghong Song r0 -= r1; \
611*23a88faeSYonghong Song exit; \
612*23a88faeSYonghong Song " :
613*23a88faeSYonghong Song : __imm(bpf_ktime_get_ns)
614*23a88faeSYonghong Song : __clobber_all);
615*23a88faeSYonghong Song }
616*23a88faeSYonghong Song
617*23a88faeSYonghong Song SEC("socket")
618*23a88faeSYonghong Song __description("check deducing bounds from non-const, jmp32, <const> != <non_const>")
619*23a88faeSYonghong Song __success __retval(0)
deducing_bounds_from_non_const_30(void)620*23a88faeSYonghong Song __naked void deducing_bounds_from_non_const_30(void)
621*23a88faeSYonghong Song {
622*23a88faeSYonghong Song asm volatile (" \
623*23a88faeSYonghong Song call %[bpf_ktime_get_ns]; \
624*23a88faeSYonghong Song if w0 < 3 goto l0_%=; \
625*23a88faeSYonghong Song w2 = 2; \
626*23a88faeSYonghong Song if w2 != w0 goto l0_%=; \
627*23a88faeSYonghong Song goto l1_%=; \
628*23a88faeSYonghong Song l0_%=: \
629*23a88faeSYonghong Song r0 = 0; \
630*23a88faeSYonghong Song exit; \
631*23a88faeSYonghong Song l1_%=: \
632*23a88faeSYonghong Song r0 -= r1; \
633*23a88faeSYonghong Song exit; \
634*23a88faeSYonghong Song " :
635*23a88faeSYonghong Song : __imm(bpf_ktime_get_ns)
636*23a88faeSYonghong Song : __clobber_all);
637*23a88faeSYonghong Song }
638*23a88faeSYonghong Song
639aec08d67SYonghong Song char _license[] SEC("license") = "GPL";
640