xref: /linux/tools/testing/selftests/bpf/progs/verifier_cgroup_inv_retcode.c (revision a23e1966932464e1c5226cb9ac4ce1d5fc10ba22)
1047687a7SEduard Zingerman // SPDX-License-Identifier: GPL-2.0
2047687a7SEduard Zingerman /* Converted from tools/testing/selftests/bpf/verifier/cgroup_inv_retcode.c */
3047687a7SEduard Zingerman 
4047687a7SEduard Zingerman #include <linux/bpf.h>
5047687a7SEduard Zingerman #include <bpf/bpf_helpers.h>
6047687a7SEduard Zingerman #include "bpf_misc.h"
7047687a7SEduard Zingerman 
8047687a7SEduard Zingerman SEC("cgroup/sock")
9047687a7SEduard Zingerman __description("bpf_exit with invalid return code. test1")
10*c871d0e0SAndrii Nakryiko __failure __msg("smin=0 smax=4294967295 should have been in [0, 1]")
with_invalid_return_code_test1(void)11047687a7SEduard Zingerman __naked void with_invalid_return_code_test1(void)
12047687a7SEduard Zingerman {
13047687a7SEduard Zingerman 	asm volatile ("					\
14047687a7SEduard Zingerman 	r0 = *(u32*)(r1 + 0);				\
15047687a7SEduard Zingerman 	exit;						\
16047687a7SEduard Zingerman "	::: __clobber_all);
17047687a7SEduard Zingerman }
18047687a7SEduard Zingerman 
19047687a7SEduard Zingerman SEC("cgroup/sock")
20047687a7SEduard Zingerman __description("bpf_exit with invalid return code. test2")
21047687a7SEduard Zingerman __success
with_invalid_return_code_test2(void)22047687a7SEduard Zingerman __naked void with_invalid_return_code_test2(void)
23047687a7SEduard Zingerman {
24047687a7SEduard Zingerman 	asm volatile ("					\
25047687a7SEduard Zingerman 	r0 = *(u32*)(r1 + 0);				\
26047687a7SEduard Zingerman 	r0 &= 1;					\
27047687a7SEduard Zingerman 	exit;						\
28047687a7SEduard Zingerman "	::: __clobber_all);
29047687a7SEduard Zingerman }
30047687a7SEduard Zingerman 
31047687a7SEduard Zingerman SEC("cgroup/sock")
32047687a7SEduard Zingerman __description("bpf_exit with invalid return code. test3")
33*c871d0e0SAndrii Nakryiko __failure __msg("smin=0 smax=3 should have been in [0, 1]")
with_invalid_return_code_test3(void)34047687a7SEduard Zingerman __naked void with_invalid_return_code_test3(void)
35047687a7SEduard Zingerman {
36047687a7SEduard Zingerman 	asm volatile ("					\
37047687a7SEduard Zingerman 	r0 = *(u32*)(r1 + 0);				\
38047687a7SEduard Zingerman 	r0 &= 3;					\
39047687a7SEduard Zingerman 	exit;						\
40047687a7SEduard Zingerman "	::: __clobber_all);
41047687a7SEduard Zingerman }
42047687a7SEduard Zingerman 
43047687a7SEduard Zingerman SEC("cgroup/sock")
44047687a7SEduard Zingerman __description("bpf_exit with invalid return code. test4")
45047687a7SEduard Zingerman __success
with_invalid_return_code_test4(void)46047687a7SEduard Zingerman __naked void with_invalid_return_code_test4(void)
47047687a7SEduard Zingerman {
48047687a7SEduard Zingerman 	asm volatile ("					\
49047687a7SEduard Zingerman 	r0 = 1;						\
50047687a7SEduard Zingerman 	exit;						\
51047687a7SEduard Zingerman "	::: __clobber_all);
52047687a7SEduard Zingerman }
53047687a7SEduard Zingerman 
54047687a7SEduard Zingerman SEC("cgroup/sock")
55047687a7SEduard Zingerman __description("bpf_exit with invalid return code. test5")
56*c871d0e0SAndrii Nakryiko __failure __msg("smin=2 smax=2 should have been in [0, 1]")
with_invalid_return_code_test5(void)57047687a7SEduard Zingerman __naked void with_invalid_return_code_test5(void)
58047687a7SEduard Zingerman {
59047687a7SEduard Zingerman 	asm volatile ("					\
60047687a7SEduard Zingerman 	r0 = 2;						\
61047687a7SEduard Zingerman 	exit;						\
62047687a7SEduard Zingerman "	::: __clobber_all);
63047687a7SEduard Zingerman }
64047687a7SEduard Zingerman 
65047687a7SEduard Zingerman SEC("cgroup/sock")
66047687a7SEduard Zingerman __description("bpf_exit with invalid return code. test6")
67047687a7SEduard Zingerman __failure __msg("R0 is not a known value (ctx)")
with_invalid_return_code_test6(void)68047687a7SEduard Zingerman __naked void with_invalid_return_code_test6(void)
69047687a7SEduard Zingerman {
70047687a7SEduard Zingerman 	asm volatile ("					\
71047687a7SEduard Zingerman 	r0 = r1;					\
72047687a7SEduard Zingerman 	exit;						\
73047687a7SEduard Zingerman "	::: __clobber_all);
74047687a7SEduard Zingerman }
75047687a7SEduard Zingerman 
76047687a7SEduard Zingerman SEC("cgroup/sock")
77047687a7SEduard Zingerman __description("bpf_exit with invalid return code. test7")
78*c871d0e0SAndrii Nakryiko __failure __msg("R0 has unknown scalar value should have been in [0, 1]")
with_invalid_return_code_test7(void)79047687a7SEduard Zingerman __naked void with_invalid_return_code_test7(void)
80047687a7SEduard Zingerman {
81047687a7SEduard Zingerman 	asm volatile ("					\
82047687a7SEduard Zingerman 	r0 = *(u32*)(r1 + 0);				\
83047687a7SEduard Zingerman 	r2 = *(u32*)(r1 + 4);				\
84047687a7SEduard Zingerman 	r0 *= r2;					\
85047687a7SEduard Zingerman 	exit;						\
86047687a7SEduard Zingerman "	::: __clobber_all);
87047687a7SEduard Zingerman }
88047687a7SEduard Zingerman 
89047687a7SEduard Zingerman char _license[] SEC("license") = "GPL";
90