CVE-2026-64450: tipc: fix out-of-bounds read in broadcast Gap ACK blocks
In the Linux kernel, the following vulnerability has been resolved:
tipc: fix out-of-bounds read in broadcast Gap ACK blocks
A broadcast PROTOCOL/STATEMSG can carry a Gap ACK blocks record in its data area. tipcgetgapackblks() only verifies that the record's len field is self-consistent with its ugackcnt/bgackcnt counts (sz == structsize(p, gacks, ugackcnt + bgackcnt)); it does not check that the record actually fits in the message data area, msgdatasz().
The unicast caller tipclinkprotorcv() bounds it ("if (glen > dlen) break;"), but the broadcast caller tipcbcastsyncrcv() discards the returned size, so tipclinkadvancetransmq() copies the record off the receive skb with an attacker-controlled count:
thisga = kmemdup(ga, structsize(ga, gacks, ga->bgackcnt), GFPATOMIC);
A TIPC neighbour that negotiated TIPCGAPACKBLOCK triggers it with one ordinary broadcast STATEMSG (msgbcackinvalid() clear), sized so its data area is short, carrying a Gap ACK record with len = 0x400, bgackcnt = 0xff and ugackcnt = 0. len then equals structsize(p, gacks, 255), so the consistency check passes and ga is non-NULL; kmemdup() reads structsize(ga, gacks, 255) = 1024 bytes out of the much smaller skb:
BUG: KASAN: slab-out-of-bounds in kmemdupnoprof+0x48/0x60 Read of size 1024 at addr ffff0000c7030d38 by task poc864/69 Call trace: kmemdupnoprof+0x48/0x60 tipclinkadvancetransmq+0x86c/0xb80 tipclinkbcackrcv+0x19c/0x1e0 tipcbcastsyncrcv+0x1c4/0x2c4 tipcrcv+0x85c/0x1340 tipcl2rcvmsg+0xac/0x104 The buggy address belongs to the object at ffff0000c7030d00 which belongs to the cache skbuffsmallhead of size 704 The buggy address is located 56 bytes inside of allocated 704-byte region [ffff0000c7030d00, ffff0000c7030fc0)
The copied-out bytes are subsequently consumed as gap/ack values, but the read is already out of bounds at the kmemdup() regardless of how they are used.
The unicast STATE path drops such a message: "if (glen > dlen) break;" skips the rest of STATEMSG handling and the skb is freed. Make the broadcast path drop it too. tipcbcastsyncrcv() now bounds the record against msgdatasz() and, when it does not fit, reports it back through tipcnodebcsyncrcv() to tipcrcv() so the skb is discarded rather than processed. ga is not cleared on this path: ga == NULL already means "legacy peer without Selective ACK", a distinct legitimate state.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade to a fixed release to a version that resolves this vulnerability.
Fixed in 6.6.145.2-1 - Upgrade
Upgrade
Linux kernel (TIPC)to a version that resolves this vulnerability.Fixed in tipc_bcast_sync_rcv+0x1c4/0x2c4Patch tipc: fix out-of-bounds read in broadcast Gap ACK blocks - Configuration
Apply the fix so tipc_bcast_sync_rcv() bounds the Gap ACK blocks record before copying/consuming it (the resolved change referenced as 'tipc: fix out-of-bounds read in broadcast Gap ACK blocks' and 'tipc_bcast_sync_rcv+0x1c4/0x2c4').
TIPC broadcast Gap ACK handling bounds check for Gap ACK blocks record length = enforced
Event History
Frequently Asked Questions
What is the severity of CVE-2026-64450?
The severity of CVE-2026-64450 is critical with a CVSS score of 9.1.
What systems are affected by CVE-2026-64450?
CVE-2026-64450 affects the Linux kernel.
How do I fix CVE-2026-64450?
To fix CVE-2026-64450, update to the patched version of the Linux kernel that addresses the out-of-bounds read vulnerability.
What type of vulnerability is CVE-2026-64450?
CVE-2026-64450 is an out-of-bounds read vulnerability related to the TIPC protocol in the Linux kernel.
What are the potential impacts of CVE-2026-64450?
CVE-2026-64450 could lead to information disclosure due to an out-of-bounds read in broadcast Gap ACK blocks.