summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeon Hwang <leon.hwang@linux.dev>2026-05-18 17:54:42 +0300
committerAlexei Starovoitov <ast@kernel.org>2026-05-19 04:51:14 +0300
commitf05ddc6771c4a2eb1801dfdd0f7a212a78fa18a7 (patch)
treea18905ac0ee5116dec76031c591141fed7d5f655
parent576482b55c19e7ec00e162a0fde4c4f1a95128c7 (diff)
downloadlinux-f05ddc6771c4a2eb1801dfdd0f7a212a78fa18a7.tar.xz
bpf: Check tail zero of bpf_common_attr using offsetofend
Because of the 8-byte alignment, the compiler will pad struct bpf_common_attr to 24 bytes. That said, sizeof(attr_common) is 24 instead of 20. When check tail zero using sizeof(attr_common) in bpf_check_uarg_tail_zero(), there will be 4 bytes that won't be checked. To also check the padding 4 bytes, replace sizeof(attr_common) with offsetofend(struct bpf_common_attr, log_true_size). Fixes: f28771c0691b ("bpf: Extend BPF syscall with common attributes support") Signed-off-by: Leon Hwang <leon.hwang@linux.dev> Link: https://lore.kernel.org/r/20260518145446.6794-2-leon.hwang@linux.dev Signed-off-by: Alexei Starovoitov <ast@kernel.org>
-rw-r--r--kernel/bpf/syscall.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c
index 6600e126fbfb..83de8fb9b9aa 100644
--- a/kernel/bpf/syscall.c
+++ b/kernel/bpf/syscall.c
@@ -6278,7 +6278,9 @@ static int __sys_bpf(enum bpf_cmd cmd, bpfptr_t uattr, unsigned int size,
memset(&attr_common, 0, sizeof(attr_common));
if (cmd & BPF_COMMON_ATTRS) {
- err = bpf_check_uarg_tail_zero(uattr_common, sizeof(attr_common), size_common);
+ err = bpf_check_uarg_tail_zero(uattr_common,
+ offsetofend(struct bpf_common_attr, log_true_size),
+ size_common);
if (err)
return err;