Re: [PATCH bpf-next] bpf: clear user buf when bpf_d_path failed

From: Tao Chen
Date: Thu Jun 12 2025 - 22:39:03 EST


在 2025/6/13 08:06, Andrii Nakryiko 写道:
On Thu, Jun 12, 2025 at 4:56 PM Alexei Starovoitov
<alexei.starovoitov@xxxxxxxxx> wrote:

On Thu, Jun 12, 2025 at 4:27 PM Andrii Nakryiko
<andrii.nakryiko@xxxxxxxxx> wrote:

On Thu, Jun 12, 2025 at 2:40 PM Alexei Starovoitov
<alexei.starovoitov@xxxxxxxxx> wrote:

On Thu, Jun 12, 2025 at 2:29 PM Andrii Nakryiko
<andrii.nakryiko@xxxxxxxxx> wrote:

On Wed, Jun 11, 2025 at 8:49 AM Tao Chen <chen.dylane@xxxxxxxxx> wrote:

The bpf_d_path() function may fail. If it does,
clear the user buf, like bpf_probe_read etc.


But that doesn't mean we *have to* do memset(0) for bpf_d_path(),
though. Especially given that path buffer can be pretty large (4KB).

Is there an issue you are trying to address with this, or is it more
of a consistency clean up? Note, that more or less recently we made
this zero filling behavior an option with an extra flag
(BPF_F_PAD_ZEROS) for newer APIs. And if anything, bpf_d_path() is
more akin to variable-sized string probing APIs rather than
fixed-sized bpf_probe_read* family.

All old helpers had this BPF_F_PAD_ZEROS behavior
(or rather should have had).
So it makes sense to zero in this helper too for consistency.
I don't share performance concerns. This is an error path.

It's just a bizarre behavior as it stands right now.

On error, you'll have a zeroed out buffer, OK, good so far.

On success, though, you'll have a buffer where first N bytes are
filled out with good path information, but then the last sizeof(buf) -
N bytes would be, effectively, garbage.

All in all, you can't use that buffer as a key for hashmap looking
(because of leftover non-zeroed bytes at the end), yet on error we
still zero out bytes for no apparently useful reason.

And then for the bpf_path_d_path(). What do we do about that one? It
doesn't have zeroing out either in the error path, nor in the success
path. So just more inconsistency all around.

Consistency with bpf_path_d_path() kfunc is indeed missing.

Ok, since you insist, dropped this patch, and force pushed.

Great, thank you!

The changes in this patch are relatively simple, but the discussion between the two of you is more meaningful to me. I agree with Andrii's point of view. Thank you both for discussing this patch.

--
Best Regards
Tao Chen