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