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