1// SPDX-License-Identifier: GPL-2.0
2/* Copyright (c) 2024 Google LLC */
3
4#include <linux/bpf.h>
5#include <bpf/bpf_helpers.h>
6#include <bpf_sockopt_helpers.h>
7#include "bpf_misc.h"
8
9SEC("cgroup/recvmsg4")
10__success
11int recvmsg4_good_return_code(struct bpf_sock_addr *ctx)
12{
13	return 1;
14}
15
16SEC("cgroup/recvmsg4")
17__failure __msg("At program exit the register R0 has smin=0 smax=0 should have been in [1, 1]")
18int recvmsg4_bad_return_code(struct bpf_sock_addr *ctx)
19{
20	return 0;
21}
22
23SEC("cgroup/recvmsg6")
24__success
25int recvmsg6_good_return_code(struct bpf_sock_addr *ctx)
26{
27	return 1;
28}
29
30SEC("cgroup/recvmsg6")
31__failure __msg("At program exit the register R0 has smin=0 smax=0 should have been in [1, 1]")
32int recvmsg6_bad_return_code(struct bpf_sock_addr *ctx)
33{
34	return 0;
35}
36
37SEC("cgroup/recvmsg_unix")
38__success
39int recvmsg_unix_good_return_code(struct bpf_sock_addr *ctx)
40{
41	return 1;
42}
43
44SEC("cgroup/recvmsg_unix")
45__failure __msg("At program exit the register R0 has smin=0 smax=0 should have been in [1, 1]")
46int recvmsg_unix_bad_return_code(struct bpf_sock_addr *ctx)
47{
48	return 0;
49}
50
51SEC("cgroup/sendmsg4")
52__success
53int sendmsg4_good_return_code_0(struct bpf_sock_addr *ctx)
54{
55	return 0;
56}
57
58SEC("cgroup/sendmsg4")
59__success
60int sendmsg4_good_return_code_1(struct bpf_sock_addr *ctx)
61{
62	return 1;
63}
64
65SEC("cgroup/sendmsg4")
66__failure __msg("At program exit the register R0 has smin=2 smax=2 should have been in [0, 1]")
67int sendmsg4_bad_return_code(struct bpf_sock_addr *ctx)
68{
69	return 2;
70}
71
72SEC("cgroup/sendmsg6")
73__success
74int sendmsg6_good_return_code_0(struct bpf_sock_addr *ctx)
75{
76	return 0;
77}
78
79SEC("cgroup/sendmsg6")
80__success
81int sendmsg6_good_return_code_1(struct bpf_sock_addr *ctx)
82{
83	return 1;
84}
85
86SEC("cgroup/sendmsg6")
87__failure __msg("At program exit the register R0 has smin=2 smax=2 should have been in [0, 1]")
88int sendmsg6_bad_return_code(struct bpf_sock_addr *ctx)
89{
90	return 2;
91}
92
93SEC("cgroup/sendmsg_unix")
94__success
95int sendmsg_unix_good_return_code_0(struct bpf_sock_addr *ctx)
96{
97	return 0;
98}
99
100SEC("cgroup/sendmsg_unix")
101__success
102int sendmsg_unix_good_return_code_1(struct bpf_sock_addr *ctx)
103{
104	return 1;
105}
106
107SEC("cgroup/sendmsg_unix")
108__failure __msg("At program exit the register R0 has smin=2 smax=2 should have been in [0, 1]")
109int sendmsg_unix_bad_return_code(struct bpf_sock_addr *ctx)
110{
111	return 2;
112}
113
114SEC("cgroup/getpeername4")
115__success
116int getpeername4_good_return_code(struct bpf_sock_addr *ctx)
117{
118	return 1;
119}
120
121SEC("cgroup/getpeername4")
122__failure __msg("At program exit the register R0 has smin=0 smax=0 should have been in [1, 1]")
123int getpeername4_bad_return_code(struct bpf_sock_addr *ctx)
124{
125	return 0;
126}
127
128SEC("cgroup/getpeername6")
129__success
130int getpeername6_good_return_code(struct bpf_sock_addr *ctx)
131{
132	return 1;
133}
134
135SEC("cgroup/getpeername6")
136__failure __msg("At program exit the register R0 has smin=0 smax=0 should have been in [1, 1]")
137int getpeername6_bad_return_code(struct bpf_sock_addr *ctx)
138{
139	return 0;
140}
141
142SEC("cgroup/getpeername_unix")
143__success
144int getpeername_unix_good_return_code(struct bpf_sock_addr *ctx)
145{
146	return 1;
147}
148
149SEC("cgroup/getpeername_unix")
150__failure __msg("At program exit the register R0 has smin=0 smax=0 should have been in [1, 1]")
151int getpeername_unix_bad_return_code(struct bpf_sock_addr *ctx)
152{
153	return 0;
154}
155
156SEC("cgroup/getsockname4")
157__success
158int getsockname4_good_return_code(struct bpf_sock_addr *ctx)
159{
160	return 1;
161}
162
163SEC("cgroup/getsockname4")
164__failure __msg("At program exit the register R0 has smin=0 smax=0 should have been in [1, 1]")
165int getsockname4_bad_return_code(struct bpf_sock_addr *ctx)
166{
167	return 0;
168}
169
170SEC("cgroup/getsockname6")
171__success
172int getsockname6_good_return_code(struct bpf_sock_addr *ctx)
173{
174	return 1;
175}
176
177SEC("cgroup/getsockname6")
178__failure __msg("At program exit the register R0 has smin=0 smax=0 should have been in [1, 1]")
179int getsockname6_bad_return_code(struct bpf_sock_addr *ctx)
180{
181	return 0;
182}
183
184SEC("cgroup/getsockname_unix")
185__success
186int getsockname_unix_good_return_code(struct bpf_sock_addr *ctx)
187{
188	return 1;
189}
190
191SEC("cgroup/getsockname_unix")
192__failure __msg("At program exit the register R0 has smin=0 smax=0 should have been in [1, 1]")
193int getsockname_unix_unix_bad_return_code(struct bpf_sock_addr *ctx)
194{
195	return 0;
196}
197
198SEC("cgroup/bind4")
199__success
200int bind4_good_return_code_0(struct bpf_sock_addr *ctx)
201{
202	return 0;
203}
204
205SEC("cgroup/bind4")
206__success
207int bind4_good_return_code_1(struct bpf_sock_addr *ctx)
208{
209	return 1;
210}
211
212SEC("cgroup/bind4")
213__success
214int bind4_good_return_code_2(struct bpf_sock_addr *ctx)
215{
216	return 2;
217}
218
219SEC("cgroup/bind4")
220__success
221int bind4_good_return_code_3(struct bpf_sock_addr *ctx)
222{
223	return 3;
224}
225
226SEC("cgroup/bind4")
227__failure __msg("At program exit the register R0 has smin=4 smax=4 should have been in [0, 3]")
228int bind4_bad_return_code(struct bpf_sock_addr *ctx)
229{
230	return 4;
231}
232
233SEC("cgroup/bind6")
234__success
235int bind6_good_return_code_0(struct bpf_sock_addr *ctx)
236{
237	return 0;
238}
239
240SEC("cgroup/bind6")
241__success
242int bind6_good_return_code_1(struct bpf_sock_addr *ctx)
243{
244	return 1;
245}
246
247SEC("cgroup/bind6")
248__success
249int bind6_good_return_code_2(struct bpf_sock_addr *ctx)
250{
251	return 2;
252}
253
254SEC("cgroup/bind6")
255__success
256int bind6_good_return_code_3(struct bpf_sock_addr *ctx)
257{
258	return 3;
259}
260
261SEC("cgroup/bind6")
262__failure __msg("At program exit the register R0 has smin=4 smax=4 should have been in [0, 3]")
263int bind6_bad_return_code(struct bpf_sock_addr *ctx)
264{
265	return 4;
266}
267
268SEC("cgroup/connect4")
269__success
270int connect4_good_return_code_0(struct bpf_sock_addr *ctx)
271{
272	return 0;
273}
274
275SEC("cgroup/connect4")
276__success
277int connect4_good_return_code_1(struct bpf_sock_addr *ctx)
278{
279	return 1;
280}
281
282SEC("cgroup/connect4")
283__failure __msg("At program exit the register R0 has smin=2 smax=2 should have been in [0, 1]")
284int connect4_bad_return_code(struct bpf_sock_addr *ctx)
285{
286	return 2;
287}
288
289SEC("cgroup/connect6")
290__success
291int connect6_good_return_code_0(struct bpf_sock_addr *ctx)
292{
293	return 0;
294}
295
296SEC("cgroup/connect6")
297__success
298int connect6_good_return_code_1(struct bpf_sock_addr *ctx)
299{
300	return 1;
301}
302
303SEC("cgroup/connect6")
304__failure __msg("At program exit the register R0 has smin=2 smax=2 should have been in [0, 1]")
305int connect6_bad_return_code(struct bpf_sock_addr *ctx)
306{
307	return 2;
308}
309
310SEC("cgroup/connect_unix")
311__success
312int connect_unix_good_return_code_0(struct bpf_sock_addr *ctx)
313{
314	return 0;
315}
316
317SEC("cgroup/connect_unix")
318__success
319int connect_unix_good_return_code_1(struct bpf_sock_addr *ctx)
320{
321	return 1;
322}
323
324SEC("cgroup/connect_unix")
325__failure __msg("At program exit the register R0 has smin=2 smax=2 should have been in [0, 1]")
326int connect_unix_bad_return_code(struct bpf_sock_addr *ctx)
327{
328	return 2;
329}
330
331char _license[] SEC("license") = "GPL";
332