Re: [PATCH bpf-next v4 06/13] bpf: Reject callbacks returning more than 8 bytes

Yonghong Song <[email protected]>
Newsgroups org.kernel.vger.bpf
Message-ID <[email protected]>

On 8/12/26 2:41 PM, Eduard Zingerman wrote:
> On Mon, 2026-08-10 at 17:09 -0700, Yonghong Song wrote:
>> 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]>
>> ---
> The code itself makes sense to me, but do we really need to check this?

Okay, I will remove this patch. The verifier has some definition for callback
function with returning R0. If callback function (prog) intends to return
two registers, the return register R2 will be ignored.

>
> ...
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.