summaryrefslogtreecommitdiff
path: root/tools/perf/scripts/python
diff options
context:
space:
mode:
authorIlkka Lappeteläinen <ilkka.lappetelainen@gmail.com>2026-09-25 15:48:29 +0300
committerJakub Kicinski <kuba@kernel.org>2026-09-29 16:30:17 -0700
commit2cf81fc9505b148b1b70068303ea6ea4b1212403 (patch)
tree970315514b4fad513872f203a3937f6ec48dec48 /tools/perf/scripts/python
parent54518e0e827f4ca9229ae657022c60bf60f5c1bf (diff)
downloadlinux-2cf81fc9505b148b1b70068303ea6ea4b1212403.tar.gz
linux-2cf81fc9505b148b1b70068303ea6ea4b1212403.zip
net/packet: prevent TX_RING byte count overflow
tpacket_snd() drains every SEND_REQUEST frame in a TX ring and adds each valid packet length to the signed int len_sum. Userspace can recycle completed frames concurrently, so a single blocking send call is not bounded by the ring size. After enough successful transmissions len_sum wraps into the negative range. In particular, 65536 65535-byte frames followed by a 65007-byte frame produce 0xfffffdef, or -EIOCBQUEUED. sock_sendmsg_nosec() treats that as an impossible return and triggers a BUG. On systems configured to panic on oops, a CAP_NET_RAW holder can panic the host kernel. Stop before the next frame would make the byte count exceed INT_MAX. The positive short count leaves that frame pending for a later send call. A two-thread TPACKET_V2 reproducer triggered the BUG on an arm64 build of Linux 7.3-rc4. With this change, the same reproducer returned the expected positive short count without an oops. Fixes: 69e3c75f4d54 ("net: TX_RING and packet mmap") Cc: stable@vger.kernel.org Signed-off-by: Ilkka Lappeteläinen <ilkka.lappetelainen@gmail.com> Reviewed-by: Willem de Bruijn <willemb@google.com> Link: https://patch.msgid.link/20260925124829.6595-1-ilkka.lappetelainen@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'tools/perf/scripts/python')
0 files changed, 0 insertions, 0 deletions