lkml.org 
[lkml]   [2023]   [May]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
SubjectRe: [PATCH 2/2] [v2] bpf: fix bpf_probe_read_kernel prototype mismatch
From


On 5/24/23 6:28 AM, Arnd Bergmann wrote:
> On Wed, May 24, 2023, at 05:12, Yonghong Song wrote:
>> On 5/23/23 12:43 PM, Arnd Bergmann wrote:
>
>>> Aside from the warning, this addresses a bug on 32-bit architectures
>>> from incorrect argument passing with the mismatched prototype.
>>
>> Could you explain what is this '32-bit architectures ... incorrect
>> argument passing' thing?
>
> I've expanded that paragraph now:
>
> | Aside from the warning, this addresses a bug on 32-bit architectures
> | from incorrect argument passing with the mismatched prototype:
> | BPF_CALL_x() functions use 64-bit arguments that are passed in
> | pairs of register or on the stack on 32-bit architectures, while the
> | normal function uses one register per argument.
>
> Let me know if you think I should put more details in there.

Please mention the function you try to address for the bug on
32-bit architecture is:

u64 __weak bpf_probe_read_kernel(void *dst, u32 size, const void
*unsafe_ptr)

which will be incompatible with
BPF_CALL_3(bpf_probe_read_kernel, void *, dst, u32, size,
const void *, unsafe_ptr)
in bpf_trace.c.

So you fixed this bug by using internal function
bpf_probe_read_kernel_common() instead.

Thanks.

>
>>> @@ -1635,11 +1636,13 @@ bool bpf_opcode_in_insntable(u8 code)
>>> }
>>>
>>> #ifndef CONFIG_BPF_JIT_ALWAYS_ON
>>> -u64 __weak bpf_probe_read_kernel(void *dst, u32 size, const void *unsafe_ptr)
>>> +#ifndef CONFIG_BPF_EVENTS
>>> +int bpf_probe_read_kernel_common(void * dst, u32 size, const void *unsafe_ptr)
>>
>> void * dst => void *dst
>>
>
> Fixed now.
>
> Thanks,
>
> Arnd

\
 
 \ /
  Last update: 2023-05-24 20:46    [W:0.054 / U:0.532 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site