bpf, sockmap: Fix self-redirect copied_seq double-counting
- Published
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Not listed in CISA KEV
- Fix
- Fixed in 6.1.189, 6.4, 6.6.158, 6.12.112, 6.18.55, and 1 more
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
Summary
The vulnerability affects the Linux kernel's BPF sockmap subsystem, specifically the TCP stream verdict path where a BPF program redirects packets back to the same socket. Under those conditions, the kernel can incorrectly advance the TCP receive sequence counter twice, which can trigger kernel warnings during socket receive operations.
Summarized by anthropic/claude-haiku-5.5. Verify details against the original sources.
Read the original description
In the Linux kernel, the following vulnerability has been resolved: bpf, sockmap: Fix self-redirect copied_seq double-counting When a BPF stream_verdict program redirects an skb back to the same socket (self-redirect with BPF_F_INGRESS), sk_psock_verdict_apply() calls tcp_eat_skb() which advances tcp_sk->copied_seq. However, the skb is then delivered to the socket's psock ingress queue and later read by tcp_bpf_recvmsg_parser(), which also advances copied_seq via the copied_from_self accounting path. This double-counting causes copied_seq to advance by 2x the actual data length, triggering: TCP recvmsg seq # bug 2: copied BF2E806, seq BF2E7FD, \ rcvnxt BF2E806, fl 0 WARNING: net/ipv4/tcp.c:2745 at tcp_recvmsg_locked+0x72b/0x2640 Call Trace: tcp_recvmsg+0x10a/0x500 sock_recvmsg+0x168/0x1d0 __sys_recvfrom+0x19a/0x2a0 __x64_sys_recvfrom+0xe4/0x1f0 do_syscall_64+0xf7/0x530 entry_SYSCALL_64_after_hwframe+0x77/0x7f cleanup rbuf bug: copied BF2E806 seq BF2E806 rcvnxt BF2E806 WARNING: net/ipv4/tcp.c:1609 at tcp_cleanup_rbuf+0xf2/0x1c0 Call Trace: tcp_recvmsg_locked+0x8d1/0x2640 tcp_recvmsg+0x10a/0x500 sock_recvmsg+0x168/0x1d0 __sys_recvfrom+0x19a/0x2a0 __x64_sys_recvfrom+0xe4/0x1f0 do_syscall_64+0xf7/0x530 entry_SYSCALL_64_after_hwframe+0x77/0x7f Fix this by converting self-redirect verdict to __SK_PASS at the beginning of sk_psock_verdict_apply(). This bypasses the __SK_REDIRECT case entirely (which calls sk_psock_eat_skb), letting the __SK_PASS path queue the skb to the psock ingress queue. The data is then read via tcp_bpf_recvmsg_parser(), which advances copied_seq exactly once through copied_from_self. Cross-socket redirects continue through __SK_REDIRECT with sk_psock_eat_skb() unchanged.
Timeline
- CVE published
- First seen by cve.now
Affected versions
- Linux Linux
From fe735073a50eaa71aceb2e990827fe26f33cddd6 · fixed in cf9aefb26a071cb8b6fdd761c27e022a1184946d; From e5c6de5fa025882babf89cecbed80acf49b987fa · fixed in dc98def81e3c629e25fcdd5753b1db93aab27ce9; From e5c6de5fa025882babf89cecbed80acf49b987fa · fixed in ef6f2182fee6b9721c005ccfc6aec0a47f79bbfa; From e5c6de5fa025882babf89cecbed80acf49b987fa · fixed in ae1ffd04e98beefbe5d83335d506b0bcd5c2a6b3; From e5c6de5fa025882babf89cecbed80acf49b987fa · fixed in 88942054191185c6f8bea5568cbb5614d1e99af9; From e5c6de5fa025882babf89cecbed80acf49b987fa · fixed in 490a83d6386eec1d29f470c8d7331677fb46c3b7; From 6.1.32 · fixed in 6.1.189; From 6.3.6 · fixed in 6.4
- Linux Linux
6.4
- KernelLinux
fixed in 6.1.189; From 6.2.0 · fixed in 6.6.158; From 6.4.0 · fixed in 6.12.112; From 6.7.0 · fixed in 6.18.55; From 6.13.0 · fixed in 7.2.9