Re: [PATCH bpf-next v2 06/13] bpf: Reject callbacks returning more than 8 bytes
[email protected] Tue, 4 Aug 2026 21:54:56 +0000 (UTC)
| Newsgroups | org.kernel.vger.bpf |
|---|---|
| Message-ID | <2745ebef0f1c5b970d76736ab5828d4aea78433b2d3800b877f7e1a0555f4a4d@mail.kernel.org> |
> commit 9c43eef7a91393c06822d44c361ee806f383cf97 > Author: Yonghong Song <[email protected]> > > bpf: Reject callbacks returning more than 8 bytes > > A callback handed to a helper or a kfunc (bpf_loop(), > bpf_timer_set_callback(), bpf_for_each_map_elem(), ...) is invoked > through bpf_callback_t, and an exception callback is invoked by > bpf_throw() through > > u64 (*bpf_exception_cb)(u64 cookie, u64 sp, u64 bp, u64, u64); > > Both prototypes yield a single u64 in R0, and neither caller has any > notion of a second return register, so a callback returning a value in > the R0:R2 pair would have the upper half of its return value silently > dropped. > > Reject both at load time: > > - check_ld_imm(): a callback is materialized as PTR_TO_FUNC by an > ld_imm64 pointing at its subprogram, so the subprogram's return > convention can be checked where the callback pointer is created, > before it ever reaches a helper or kfunc argument. > > - do_check_common(): an exception callback is not referenced by a > PTR_TO_FUNC, it is named by a BTF decl_tag and verified on its own, > so check it as its frame is set up, next to the existing "cannot > return void" and single-argument checks. > > Signed-off-by: Yonghong Song <[email protected]> This looks like a bug fix. Should this include: Fixes: 63b5669f8a0d ("bpf: Add helpers to describe the R0:R2 return register pair") --- AI reviewed your patch. Please fix the bug or email reply why it's not a bug. See: https://github.com/kernel-patches/vmtest/blob/master/ci/claude/README.md CI run summary: https://github.com/kernel-patches/bpf/actions/runs/30949310795