332 lines · c
1// SPDX-License-Identifier: GPL-2.02/* 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__success11int 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__success25int 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__success39int 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__success53int sendmsg4_good_return_code_0(struct bpf_sock_addr *ctx)54{55 return 0;56}57 58SEC("cgroup/sendmsg4")59__success60int 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__success74int sendmsg6_good_return_code_0(struct bpf_sock_addr *ctx)75{76 return 0;77}78 79SEC("cgroup/sendmsg6")80__success81int 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__success95int sendmsg_unix_good_return_code_0(struct bpf_sock_addr *ctx)96{97 return 0;98}99 100SEC("cgroup/sendmsg_unix")101__success102int 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__success116int 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__success130int 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__success144int 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__success158int 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__success172int 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__success186int 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__success200int bind4_good_return_code_0(struct bpf_sock_addr *ctx)201{202 return 0;203}204 205SEC("cgroup/bind4")206__success207int bind4_good_return_code_1(struct bpf_sock_addr *ctx)208{209 return 1;210}211 212SEC("cgroup/bind4")213__success214int bind4_good_return_code_2(struct bpf_sock_addr *ctx)215{216 return 2;217}218 219SEC("cgroup/bind4")220__success221int 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__success235int bind6_good_return_code_0(struct bpf_sock_addr *ctx)236{237 return 0;238}239 240SEC("cgroup/bind6")241__success242int bind6_good_return_code_1(struct bpf_sock_addr *ctx)243{244 return 1;245}246 247SEC("cgroup/bind6")248__success249int bind6_good_return_code_2(struct bpf_sock_addr *ctx)250{251 return 2;252}253 254SEC("cgroup/bind6")255__success256int 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__success270int connect4_good_return_code_0(struct bpf_sock_addr *ctx)271{272 return 0;273}274 275SEC("cgroup/connect4")276__success277int 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__success291int connect6_good_return_code_0(struct bpf_sock_addr *ctx)292{293 return 0;294}295 296SEC("cgroup/connect6")297__success298int 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__success312int connect_unix_good_return_code_0(struct bpf_sock_addr *ctx)313{314 return 0;315}316 317SEC("cgroup/connect_unix")318__success319int 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