// SPDX-License-Identifier: GPL-2.0 #include #include #include #include "bpf_misc.h" SEC("lsm_cgroup/socket_create") __description("lsm_cgroup bpf_set_retval success") __success int BPF_PROG(lsm_cgroup_set_retval_zero_valid, int family, int type, int protocol, int kern) { bpf_set_retval(0); return 0; } SEC("lsm_cgroup/socket_create") __description("lsm_cgroup bpf_set_retval valid errno") __success int BPF_PROG(lsm_cgroup_set_retval_negative_valid, int family, int type, int protocol, int kern) { bpf_set_retval(-12); return 0; } SEC("lsm_cgroup/socket_create") __description("lsm_cgroup bpf_set_retval invalid negative value") __failure __msg("should have been in [-4095, 0]") int BPF_PROG(lsm_cgroup_set_retval_negative_invalid, int family, int type, int protocol, int kern) { bpf_set_retval(-4096); return 0; } SEC("lsm_cgroup/socket_create") __description("lsm_cgroup bpf_set_retval invalid positive value") __failure __msg("should have been in [-4095, 0]") int BPF_PROG(lsm_cgroup_set_retval_positive_invalid, int family, int type, int protocol, int kern) { bpf_set_retval(1); return 0; } SEC("cgroup/dev") __description("cgroup_device bpf_set_retval success") __success int cgroup_dev_set_retval_0(struct bpf_cgroup_dev_ctx *ctx) { bpf_set_retval(0); return 1; } SEC("cgroup/dev") __description("cgroup_device bpf_set_retval valid errno") __success int cgroup_dev_set_retval_neg_maxerrno(struct bpf_cgroup_dev_ctx *ctx) { bpf_set_retval(-4095); return 1; } SEC("cgroup/dev") __description("cgroup_device bpf_set_retval invalid positive value") __failure __msg("should have been in [-4095, 0]") int cgroup_dev_set_retval_1(struct bpf_cgroup_dev_ctx *ctx) { bpf_set_retval(1); return 1; } SEC("cgroup/dev") __description("cgroup_device bpf_set_retval invalid negative value") __failure __msg("should have been in [-4095, 0]") int cgroup_dev_set_retval_neg_4096(struct bpf_cgroup_dev_ctx *ctx) { bpf_set_retval(-4096); return 1; } SEC("cgroup/dev") __description("bpf_set_retval bounds check survives state pruning") __failure __msg("should have been in [-4095, 0]") __naked int cgroup_dev_set_retval_pruning_bypass(struct bpf_cgroup_dev_ctx *ctx) { asm volatile ( "call %[bpf_get_prandom_u32];" "if r0 != 0 goto 1f;" "r0 = r0;" "r0 = r0;" "r0 = r0;" "r0 = r0;" "goto 2f;" "1:" "call %[bpf_get_prandom_u32];" "2:" "r1 = r0;" "call %[bpf_set_retval];" "r0 = 1;" "exit;" : : __imm(bpf_get_prandom_u32), __imm(bpf_set_retval) : __clobber_common ); } char _license[] SEC("license") = "GPL";