xref: /linux/tools/testing/selftests/bpf/progs/verifier_lsm.c (revision a6021aa24f6417416d93318bbfa022ab229c33c8)
1 // SPDX-License-Identifier: GPL-2.0
2 
3 #include <linux/bpf.h>
4 #include <bpf/bpf_helpers.h>
5 #include "bpf_misc.h"
6 
7 SEC("lsm/file_alloc_security")
8 __description("lsm bpf prog with -4095~0 retval. test 1")
9 __success
10 __naked int errno_zero_retval_test1(void *ctx)
11 {
12 	asm volatile (
13 	"r0 = 0;"
14 	"exit;"
15 	::: __clobber_all);
16 }
17 
18 SEC("lsm/file_alloc_security")
19 __description("lsm bpf prog with -4095~0 retval. test 2")
20 __success
21 __naked int errno_zero_retval_test2(void *ctx)
22 {
23 	asm volatile (
24 	"r0 = -4095;"
25 	"exit;"
26 	::: __clobber_all);
27 }
28 
29 SEC("lsm/file_mprotect")
30 __description("lsm bpf prog with -4095~0 retval. test 4")
31 __failure __msg("R0 has smin=-4096 smax=-4096 should have been in [-4095, 0]")
32 __naked int errno_zero_retval_test4(void *ctx)
33 {
34 	asm volatile (
35 	"r0 = -4096;"
36 	"exit;"
37 	::: __clobber_all);
38 }
39 
40 SEC("lsm/file_mprotect")
41 __description("lsm bpf prog with -4095~0 retval. test 5")
42 __failure __msg("R0 has smin=4096 smax=4096 should have been in [-4095, 0]")
43 __naked int errno_zero_retval_test5(void *ctx)
44 {
45 	asm volatile (
46 	"r0 = 4096;"
47 	"exit;"
48 	::: __clobber_all);
49 }
50 
51 SEC("lsm/file_mprotect")
52 __description("lsm bpf prog with -4095~0 retval. test 6")
53 __failure __msg("R0 has smin=1 smax=1 should have been in [-4095, 0]")
54 __naked int errno_zero_retval_test6(void *ctx)
55 {
56 	asm volatile (
57 	"r0 = 1;"
58 	"exit;"
59 	::: __clobber_all);
60 }
61 
62 SEC("lsm/audit_rule_known")
63 __description("lsm bpf prog with bool retval. test 1")
64 __success
65 __naked int bool_retval_test1(void *ctx)
66 {
67 	asm volatile (
68 	"r0 = 1;"
69 	"exit;"
70 	::: __clobber_all);
71 }
72 
73 SEC("lsm/audit_rule_known")
74 __description("lsm bpf prog with bool retval. test 2")
75 __success
76 __success
77 __naked int bool_retval_test2(void *ctx)
78 {
79 	asm volatile (
80 	"r0 = 0;"
81 	"exit;"
82 	::: __clobber_all);
83 }
84 
85 SEC("lsm/audit_rule_known")
86 __description("lsm bpf prog with bool retval. test 3")
87 __failure __msg("R0 has smin=-1 smax=-1 should have been in [0, 1]")
88 __naked int bool_retval_test3(void *ctx)
89 {
90 	asm volatile (
91 	"r0 = -1;"
92 	"exit;"
93 	::: __clobber_all);
94 }
95 
96 SEC("lsm/audit_rule_known")
97 __description("lsm bpf prog with bool retval. test 4")
98 __failure __msg("R0 has smin=2 smax=2 should have been in [0, 1]")
99 __naked int bool_retval_test4(void *ctx)
100 {
101 	asm volatile (
102 	"r0 = 2;"
103 	"exit;"
104 	::: __clobber_all);
105 }
106 
107 SEC("lsm/file_free_security")
108 __success
109 __description("lsm bpf prog with void retval. test 1")
110 __naked int void_retval_test1(void *ctx)
111 {
112 	asm volatile (
113 	"r0 = -4096;"
114 	"exit;"
115 	::: __clobber_all);
116 }
117 
118 SEC("lsm/file_free_security")
119 __success
120 __description("lsm bpf prog with void retval. test 2")
121 __naked int void_retval_test2(void *ctx)
122 {
123 	asm volatile (
124 	"r0 = 4096;"
125 	"exit;"
126 	::: __clobber_all);
127 }
128 
129 SEC("lsm/getprocattr")
130 __description("lsm disabled hook: getprocattr")
131 __failure __msg("points to disabled hook")
132 __naked int disabled_hook_test1(void *ctx)
133 {
134 	asm volatile (
135 	"r0 = 0;"
136 	"exit;"
137 	::: __clobber_all);
138 }
139 
140 SEC("lsm/setprocattr")
141 __description("lsm disabled hook: setprocattr")
142 __failure __msg("points to disabled hook")
143 __naked int disabled_hook_test2(void *ctx)
144 {
145 	asm volatile (
146 	"r0 = 0;"
147 	"exit;"
148 	::: __clobber_all);
149 }
150 
151 SEC("lsm/ismaclabel")
152 __description("lsm disabled hook: ismaclabel")
153 __failure __msg("points to disabled hook")
154 __naked int disabled_hook_test3(void *ctx)
155 {
156 	asm volatile (
157 	"r0 = 0;"
158 	"exit;"
159 	::: __clobber_all);
160 }
161 
162 char _license[] SEC("license") = "GPL";
163