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