[PATCH bpf 0/3] Add validation for bpf_set_retval helper
From: Xu Kuohai
Date: Sat May 30 2026 - 06:36:21 EST
The bpf_set_retval() helper is used by cgroup BPF programs to set the
return value of the kernel hook. The argument type for this helper is
ARG_ANYTHING. This allows setting a positive value, which no cgroup
hook expects and can cause issues, such as the kernel panic reported
in [1].
This series adds validation for the argument of the bpf_set_retval()
helper.
For BPF_LSM_CGROUP, the same validation as BPF_LSM_MAC is enforced,
i.e. validate the argument against the LSM hook specific range, which
is returned by bpf_lsm_get_retval_range().
For all other cgroup program types, restrict the argument to
[-MAX_ERRNO, 0], which matches the kernel convention of 0 for success
and negative errno for error.
[1] https://lore.kernel.org/all/567d3206-74a5-44e5-99c6-779c425f399e@xxxxxxxxxxxxxxxx
v3:
- Mark R1 as precise to prevent validation bypass via branch pruning (sashiko)
v2: https://lore.kernel.org/bpf/20260530055557.549474-1-xukuohai@xxxxxxxxxxxxxxx/
- Extend validation from LSM cgroup BPF type to all cgroup BPF types (sashiko)
v1: https://lore.kernel.org/bpf/20260523085806.417723-1-xukuohai@xxxxxxxxxxxxxxx/
Xu Kuohai (3):
bpf: Add validation for bpf_set_retval argument
selftests/bpf: Fix cgroup bpf tests broken by bpf_set_retval
validation
selftests/bpf: Add tests for bpf_set_retval validation
kernel/bpf/verifier.c | 25 ++++
.../selftests/bpf/prog_tests/verifier.c | 2 +
.../bpf/progs/cgroup_getset_retval_hooks.c | 6 +-
.../selftests/bpf/progs/sk_bypass_prot_mem.c | 2 +
.../selftests/bpf/progs/verifier_cgroup.c | 114 ++++++++++++++++++
5 files changed, 148 insertions(+), 1 deletion(-)
create mode 100644 tools/testing/selftests/bpf/progs/verifier_cgroup.c
--
2.43.0