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 8 SEC("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 22 SEC("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 36 SEC("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 50 SEC("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 64 SEC("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 78 SEC("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 92 SEC("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 107 SEC("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 120 SEC("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 133 SEC("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 146 SEC("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 161 SEC("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 174 SEC("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 187 SEC("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 200 SEC("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 213 char _license[] SEC("license") = "GPL"; 214
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.