1 // SPDX-License-Identifier: GPL-2.0 2 /* Converted from tools/testing/selftests/bpf/verifier/cgroup_inv_retcode.c */ 3 4 #include <linux/bpf.h> 5 #include <bpf/bpf_helpers.h> 6 #include "bpf_misc.h" 7 8 SEC("cgroup/sock") 9 __description("bpf_exit with invalid return code. test1") 10 __failure __msg("R0 has value (0x0; 0xffffffff)") 11 __naked void with_invalid_return_code_test1(void) 12 { 13 asm volatile (" \ 14 r0 = *(u32*)(r1 + 0); \ 15 exit; \ 16 " ::: __clobber_all); 17 } 18 19 SEC("cgroup/sock") 20 __description("bpf_exit with invalid return code. test2") 21 __success 22 __naked void with_invalid_return_code_test2(void) 23 { 24 asm volatile (" \ 25 r0 = *(u32*)(r1 + 0); \ 26 r0 &= 1; \ 27 exit; \ 28 " ::: __clobber_all); 29 } 30 31 SEC("cgroup/sock") 32 __description("bpf_exit with invalid return code. test3") 33 __failure __msg("R0 has value (0x0; 0x3)") 34 __naked void with_invalid_return_code_test3(void) 35 { 36 asm volatile (" \ 37 r0 = *(u32*)(r1 + 0); \ 38 r0 &= 3; \ 39 exit; \ 40 " ::: __clobber_all); 41 } 42 43 SEC("cgroup/sock") 44 __description("bpf_exit with invalid return code. test4") 45 __success 46 __naked void with_invalid_return_code_test4(void) 47 { 48 asm volatile (" \ 49 r0 = 1; \ 50 exit; \ 51 " ::: __clobber_all); 52 } 53 54 SEC("cgroup/sock") 55 __description("bpf_exit with invalid return code. test5") 56 __failure __msg("R0 has value (0x2; 0x0)") 57 __naked void with_invalid_return_code_test5(void) 58 { 59 asm volatile (" \ 60 r0 = 2; \ 61 exit; \ 62 " ::: __clobber_all); 63 } 64 65 SEC("cgroup/sock") 66 __description("bpf_exit with invalid return code. test6") 67 __failure __msg("R0 is not a known value (ctx)") 68 __naked void with_invalid_return_code_test6(void) 69 { 70 asm volatile (" \ 71 r0 = r1; \ 72 exit; \ 73 " ::: __clobber_all); 74 } 75 76 SEC("cgroup/sock") 77 __description("bpf_exit with invalid return code. test7") 78 __failure __msg("R0 has unknown scalar value") 79 __naked void with_invalid_return_code_test7(void) 80 { 81 asm volatile (" \ 82 r0 = *(u32*)(r1 + 0); \ 83 r2 = *(u32*)(r1 + 4); \ 84 r0 *= r2; \ 85 exit; \ 86 " ::: __clobber_all); 87 } 88 89 char _license[] SEC("license") = "GPL"; 90