214 lines · c
1// SPDX-License-Identifier: GPL-2.02/* 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