]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
bpf: Reject negative const offsets for buffer pointers
authorSun Jian <sun.jian.kdev@gmail.com>
Tue, 14 Jul 2026 09:38:45 +0000 (02:38 -0700)
committerEduard Zingerman <eddyz87@gmail.com>
Wed, 15 Jul 2026 09:32:42 +0000 (02:32 -0700)
commitfd4cfa8c8f9a17cdec0539334d28754bc1d8a5d9
tree4c8854c8d937ed08bde3b497b02d12dfc93bf08a
parent2d8af4e633d3dea7269f2dad724977ce48034fd4
bpf: Reject negative const offsets for buffer pointers

The verifier rejects variable offsets for PTR_TO_TP_BUFFER and PTR_TO_BUF
accesses, but it currently accepts a constant negative offset produced by
pointer arithmetic.

Commit 022ac0750883 ("bpf: use reg->var_off instead of reg->off for
pointers") moved constant pointer offsets from reg->off to reg->var_off.
However, __check_buffer_access() continued to check only the instruction
offset. An access with reg->var_off equal to -8 and an instruction offset
of zero therefore passes verification.

For writable raw tracepoints, the access end is also calculated from the
unsigned reg->var_off.value. An eight-byte access starting at -8 wraps
the calculated end to zero, allowing the program to load and attach
without increasing max_tp_access.

After ensuring that reg->var_off is constant, calculate the effective
access start using signed arithmetic and reject it when it is negative.
Use the validated start to calculate the access end for both
PTR_TO_TP_BUFFER and PTR_TO_BUF.

Fixes: 022ac0750883 ("bpf: use reg->var_off instead of reg->off for pointers")
Signed-off-by: Sun Jian <sun.jian.kdev@gmail.com>
Acked-by: Shung-Hsi Yu <shung-hsi.yu@suse.com>
Cc: stable@vger.kernel.org # 5.2.0
Link: https://patch.msgid.link/20260714093846.18159-2-sun.jian.kdev@gmail.com
Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
kernel/bpf/verifier.c