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"; 214