Re: [PATCH bpf-next v5 12/16] bpf: Enable stack argument support for x86_64

Yonghong Song <[email protected]>
Newsgroups dev.linux.lists.sashiko,org.kernel.vger.bpf
Message-ID <[email protected]>

On 4/16/26 10:03 PM, [email protected] wrote:
> Sashiko AI review found 1 potential issue(s):
> - [High] Enabling `bpf_jit_supports_stack_args()` for x86_64 without the corresponding JIT implementation introduces a bisection-breaking regression that can lead to arbitrary kernel memory writes and ABI violations.
> --
>
> commit b40feee41e4472d0e27be38b4c99c940abe3c1ba
> Author: Yonghong Song <[email protected]>
>
> bpf: Enable stack argument support for x86_64
>
> This commit enables stack argument support for the x86_64 JIT and verifier
> to allow BPF programs and kfuncs to use more than 5 arguments.
>
>> diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
>> index e9b78040d703e..32864dbc2c4e8 100644
>> --- a/arch/x86/net/bpf_jit_comp.c
>> +++ b/arch/x86/net/bpf_jit_comp.c
>> @@ -3937,6 +3937,11 @@ bool bpf_jit_supports_kfunc_call(void)
>>   	return true;
>>   }
>>   
>> +bool bpf_jit_supports_stack_args(void)
>> +{
>> +	return true;
>> +}
>> +
> Does enabling this without the actual JIT implementation break bisection?
>
> If bpf_jit_supports_stack_args() returns true, the verifier will allow
> instructions using BPF_REG_PARAMS (register 11) to handle stack arguments.
> However, since the JIT support isn't implemented in this commit,
> BPF_REG_PARAMS is not yet defined in the JIT's reg2hex array.
>
> Could this cause reg2hex[11] to implicitly default to 0, which maps to
> RAX (BPF_REG_0)? If the verifier emits instructions using BPF_REG_PARAMS,
> the x86 JIT might miscompile them using RAX as the base register, potentially
> allowing an arbitrary kernel memory write since R0 is controllable by the
> BPF program.
>
> Additionally, it appears kfunc calls with >5 arguments won't have their
> arguments correctly marshaled to the System V ABI (like moving the 6th
> argument to R9), which could lead to reading uninitialized garbage from
> registers and the stack.
>
> I see the JIT implementation is added later in the series in commit
> 41dcf99330b6b ("bpf,x86: Implement JIT support for stack arguments").
> Should the JIT implementation be merged before or in the same patch as
> this feature enablement to maintain bisection?

Good point. Will enable stack args in JIT patch.

>
> [ ... ]
>
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.