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