162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci/* Converted from tools/testing/selftests/bpf/verifier/div0.c */ 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci#include <linux/bpf.h> 562306a36Sopenharmony_ci#include <bpf/bpf_helpers.h> 662306a36Sopenharmony_ci#include "bpf_misc.h" 762306a36Sopenharmony_ci 862306a36Sopenharmony_ciSEC("socket") 962306a36Sopenharmony_ci__description("DIV32 by 0, zero check 1") 1062306a36Sopenharmony_ci__success __success_unpriv __retval(42) 1162306a36Sopenharmony_ci__naked void by_0_zero_check_1_1(void) 1262306a36Sopenharmony_ci{ 1362306a36Sopenharmony_ci asm volatile (" \ 1462306a36Sopenharmony_ci w0 = 42; \ 1562306a36Sopenharmony_ci w1 = 0; \ 1662306a36Sopenharmony_ci w2 = 1; \ 1762306a36Sopenharmony_ci w2 /= w1; \ 1862306a36Sopenharmony_ci exit; \ 1962306a36Sopenharmony_ci" ::: __clobber_all); 2062306a36Sopenharmony_ci} 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ciSEC("socket") 2362306a36Sopenharmony_ci__description("DIV32 by 0, zero check 2") 2462306a36Sopenharmony_ci__success __success_unpriv __retval(42) 2562306a36Sopenharmony_ci__naked void by_0_zero_check_2_1(void) 2662306a36Sopenharmony_ci{ 2762306a36Sopenharmony_ci asm volatile (" \ 2862306a36Sopenharmony_ci w0 = 42; \ 2962306a36Sopenharmony_ci r1 = 0xffffffff00000000LL ll; \ 3062306a36Sopenharmony_ci w2 = 1; \ 3162306a36Sopenharmony_ci w2 /= w1; \ 3262306a36Sopenharmony_ci exit; \ 3362306a36Sopenharmony_ci" ::: __clobber_all); 3462306a36Sopenharmony_ci} 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ciSEC("socket") 3762306a36Sopenharmony_ci__description("DIV64 by 0, zero check") 3862306a36Sopenharmony_ci__success __success_unpriv __retval(42) 3962306a36Sopenharmony_ci__naked void div64_by_0_zero_check(void) 4062306a36Sopenharmony_ci{ 4162306a36Sopenharmony_ci asm volatile (" \ 4262306a36Sopenharmony_ci w0 = 42; \ 4362306a36Sopenharmony_ci w1 = 0; \ 4462306a36Sopenharmony_ci w2 = 1; \ 4562306a36Sopenharmony_ci r2 /= r1; \ 4662306a36Sopenharmony_ci exit; \ 4762306a36Sopenharmony_ci" ::: __clobber_all); 4862306a36Sopenharmony_ci} 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ciSEC("socket") 5162306a36Sopenharmony_ci__description("MOD32 by 0, zero check 1") 5262306a36Sopenharmony_ci__success __success_unpriv __retval(42) 5362306a36Sopenharmony_ci__naked void by_0_zero_check_1_2(void) 5462306a36Sopenharmony_ci{ 5562306a36Sopenharmony_ci asm volatile (" \ 5662306a36Sopenharmony_ci w0 = 42; \ 5762306a36Sopenharmony_ci w1 = 0; \ 5862306a36Sopenharmony_ci w2 = 1; \ 5962306a36Sopenharmony_ci w2 %%= w1; \ 6062306a36Sopenharmony_ci exit; \ 6162306a36Sopenharmony_ci" ::: __clobber_all); 6262306a36Sopenharmony_ci} 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ciSEC("socket") 6562306a36Sopenharmony_ci__description("MOD32 by 0, zero check 2") 6662306a36Sopenharmony_ci__success __success_unpriv __retval(42) 6762306a36Sopenharmony_ci__naked void by_0_zero_check_2_2(void) 6862306a36Sopenharmony_ci{ 6962306a36Sopenharmony_ci asm volatile (" \ 7062306a36Sopenharmony_ci w0 = 42; \ 7162306a36Sopenharmony_ci r1 = 0xffffffff00000000LL ll; \ 7262306a36Sopenharmony_ci w2 = 1; \ 7362306a36Sopenharmony_ci w2 %%= w1; \ 7462306a36Sopenharmony_ci exit; \ 7562306a36Sopenharmony_ci" ::: __clobber_all); 7662306a36Sopenharmony_ci} 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ciSEC("socket") 7962306a36Sopenharmony_ci__description("MOD64 by 0, zero check") 8062306a36Sopenharmony_ci__success __success_unpriv __retval(42) 8162306a36Sopenharmony_ci__naked void mod64_by_0_zero_check(void) 8262306a36Sopenharmony_ci{ 8362306a36Sopenharmony_ci asm volatile (" \ 8462306a36Sopenharmony_ci w0 = 42; \ 8562306a36Sopenharmony_ci w1 = 0; \ 8662306a36Sopenharmony_ci w2 = 1; \ 8762306a36Sopenharmony_ci r2 %%= r1; \ 8862306a36Sopenharmony_ci exit; \ 8962306a36Sopenharmony_ci" ::: __clobber_all); 9062306a36Sopenharmony_ci} 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ciSEC("tc") 9362306a36Sopenharmony_ci__description("DIV32 by 0, zero check ok, cls") 9462306a36Sopenharmony_ci__success __retval(8) 9562306a36Sopenharmony_ci__naked void _0_zero_check_ok_cls_1(void) 9662306a36Sopenharmony_ci{ 9762306a36Sopenharmony_ci asm volatile (" \ 9862306a36Sopenharmony_ci w0 = 42; \ 9962306a36Sopenharmony_ci w1 = 2; \ 10062306a36Sopenharmony_ci w2 = 16; \ 10162306a36Sopenharmony_ci w2 /= w1; \ 10262306a36Sopenharmony_ci r0 = r2; \ 10362306a36Sopenharmony_ci exit; \ 10462306a36Sopenharmony_ci" ::: __clobber_all); 10562306a36Sopenharmony_ci} 10662306a36Sopenharmony_ci 10762306a36Sopenharmony_ciSEC("tc") 10862306a36Sopenharmony_ci__description("DIV32 by 0, zero check 1, cls") 10962306a36Sopenharmony_ci__success __retval(0) 11062306a36Sopenharmony_ci__naked void _0_zero_check_1_cls_1(void) 11162306a36Sopenharmony_ci{ 11262306a36Sopenharmony_ci asm volatile (" \ 11362306a36Sopenharmony_ci w1 = 0; \ 11462306a36Sopenharmony_ci w0 = 1; \ 11562306a36Sopenharmony_ci w0 /= w1; \ 11662306a36Sopenharmony_ci exit; \ 11762306a36Sopenharmony_ci" ::: __clobber_all); 11862306a36Sopenharmony_ci} 11962306a36Sopenharmony_ci 12062306a36Sopenharmony_ciSEC("tc") 12162306a36Sopenharmony_ci__description("DIV32 by 0, zero check 2, cls") 12262306a36Sopenharmony_ci__success __retval(0) 12362306a36Sopenharmony_ci__naked void _0_zero_check_2_cls_1(void) 12462306a36Sopenharmony_ci{ 12562306a36Sopenharmony_ci asm volatile (" \ 12662306a36Sopenharmony_ci r1 = 0xffffffff00000000LL ll; \ 12762306a36Sopenharmony_ci w0 = 1; \ 12862306a36Sopenharmony_ci w0 /= w1; \ 12962306a36Sopenharmony_ci exit; \ 13062306a36Sopenharmony_ci" ::: __clobber_all); 13162306a36Sopenharmony_ci} 13262306a36Sopenharmony_ci 13362306a36Sopenharmony_ciSEC("tc") 13462306a36Sopenharmony_ci__description("DIV64 by 0, zero check, cls") 13562306a36Sopenharmony_ci__success __retval(0) 13662306a36Sopenharmony_ci__naked void by_0_zero_check_cls(void) 13762306a36Sopenharmony_ci{ 13862306a36Sopenharmony_ci asm volatile (" \ 13962306a36Sopenharmony_ci w1 = 0; \ 14062306a36Sopenharmony_ci w0 = 1; \ 14162306a36Sopenharmony_ci r0 /= r1; \ 14262306a36Sopenharmony_ci exit; \ 14362306a36Sopenharmony_ci" ::: __clobber_all); 14462306a36Sopenharmony_ci} 14562306a36Sopenharmony_ci 14662306a36Sopenharmony_ciSEC("tc") 14762306a36Sopenharmony_ci__description("MOD32 by 0, zero check ok, cls") 14862306a36Sopenharmony_ci__success __retval(2) 14962306a36Sopenharmony_ci__naked void _0_zero_check_ok_cls_2(void) 15062306a36Sopenharmony_ci{ 15162306a36Sopenharmony_ci asm volatile (" \ 15262306a36Sopenharmony_ci w0 = 42; \ 15362306a36Sopenharmony_ci w1 = 3; \ 15462306a36Sopenharmony_ci w2 = 5; \ 15562306a36Sopenharmony_ci w2 %%= w1; \ 15662306a36Sopenharmony_ci r0 = r2; \ 15762306a36Sopenharmony_ci exit; \ 15862306a36Sopenharmony_ci" ::: __clobber_all); 15962306a36Sopenharmony_ci} 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_ciSEC("tc") 16262306a36Sopenharmony_ci__description("MOD32 by 0, zero check 1, cls") 16362306a36Sopenharmony_ci__success __retval(1) 16462306a36Sopenharmony_ci__naked void _0_zero_check_1_cls_2(void) 16562306a36Sopenharmony_ci{ 16662306a36Sopenharmony_ci asm volatile (" \ 16762306a36Sopenharmony_ci w1 = 0; \ 16862306a36Sopenharmony_ci w0 = 1; \ 16962306a36Sopenharmony_ci w0 %%= w1; \ 17062306a36Sopenharmony_ci exit; \ 17162306a36Sopenharmony_ci" ::: __clobber_all); 17262306a36Sopenharmony_ci} 17362306a36Sopenharmony_ci 17462306a36Sopenharmony_ciSEC("tc") 17562306a36Sopenharmony_ci__description("MOD32 by 0, zero check 2, cls") 17662306a36Sopenharmony_ci__success __retval(1) 17762306a36Sopenharmony_ci__naked void _0_zero_check_2_cls_2(void) 17862306a36Sopenharmony_ci{ 17962306a36Sopenharmony_ci asm volatile (" \ 18062306a36Sopenharmony_ci r1 = 0xffffffff00000000LL ll; \ 18162306a36Sopenharmony_ci w0 = 1; \ 18262306a36Sopenharmony_ci w0 %%= w1; \ 18362306a36Sopenharmony_ci exit; \ 18462306a36Sopenharmony_ci" ::: __clobber_all); 18562306a36Sopenharmony_ci} 18662306a36Sopenharmony_ci 18762306a36Sopenharmony_ciSEC("tc") 18862306a36Sopenharmony_ci__description("MOD64 by 0, zero check 1, cls") 18962306a36Sopenharmony_ci__success __retval(2) 19062306a36Sopenharmony_ci__naked void _0_zero_check_1_cls_3(void) 19162306a36Sopenharmony_ci{ 19262306a36Sopenharmony_ci asm volatile (" \ 19362306a36Sopenharmony_ci w1 = 0; \ 19462306a36Sopenharmony_ci w0 = 2; \ 19562306a36Sopenharmony_ci r0 %%= r1; \ 19662306a36Sopenharmony_ci exit; \ 19762306a36Sopenharmony_ci" ::: __clobber_all); 19862306a36Sopenharmony_ci} 19962306a36Sopenharmony_ci 20062306a36Sopenharmony_ciSEC("tc") 20162306a36Sopenharmony_ci__description("MOD64 by 0, zero check 2, cls") 20262306a36Sopenharmony_ci__success __retval(-1) 20362306a36Sopenharmony_ci__naked void _0_zero_check_2_cls_3(void) 20462306a36Sopenharmony_ci{ 20562306a36Sopenharmony_ci asm volatile (" \ 20662306a36Sopenharmony_ci w1 = 0; \ 20762306a36Sopenharmony_ci w0 = -1; \ 20862306a36Sopenharmony_ci r0 %%= r1; \ 20962306a36Sopenharmony_ci exit; \ 21062306a36Sopenharmony_ci" ::: __clobber_all); 21162306a36Sopenharmony_ci} 21262306a36Sopenharmony_ci 21362306a36Sopenharmony_cichar _license[] SEC("license") = "GPL"; 214