bpf: Clear buf on error in __bpf_get_task_stack

Both bpf_get_task_stack and bpf_get_task_stack_sleepable helpers that
use __bpf_get_task_stack have buf defined as ARG_PTR_TO_UNINIT_MEM
argument and we should initialize the buf on every return path.

Adding missing buf memset for __bpf_get_task_stack fail paths. This
provides deterministic buffer contents, which is useful when the buffer
is used directly as a map key.

Fixes: 06ab134ce8 ("bpf: Refcount task stack in bpf_get_task_stack")
Fixes: b992f01e66 ("bpf: Guard against accessing NULL pt_regs in bpf_get_task_stack()")
Reported-by: Sashiko <sashiko-bot@kernel.org>
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20260803210149.296496-10-jolsa@kernel.org
This commit is contained in:
Jiri Olsa
2026-08-03 23:01:46 +02:00
committed by Andrii Nakryiko
parent 58cfc2201d
commit f5d242825c

View File

@@ -884,14 +884,17 @@ static long __bpf_get_task_stack(struct task_struct *task, void *buf, u32 size,
struct pt_regs *regs;
long res = -EINVAL;
if (!try_get_task_stack(task))
if (!try_get_task_stack(task)) {
memset(buf, 0, size);
return -EFAULT;
}
regs = task_pt_regs(task);
if (regs)
res = __bpf_get_stack(regs, task, buf, size, flags, may_fault);
else
memset(buf, 0, size);
put_task_stack(task);
return res;
}