CRITICAL Introduced in 2.6.12
netfilter ParseDcc OOB
CVE-2026-80603
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
KernelScan AI6.4MEDIUM
01Description
In the Linux kernel, the following vulnerability has been resolved: netfilter: nf_conntrack_irc: fix parse_dcc() off-by-one OOB read parse_dcc() treats data_end as an inclusive end pointer, but its only caller passes data_limit = ib_ptr + datalen, which points one past the last valid byte. The newline search loop iterates while tmp <= data_end, so when no newline is present, *tmp is read at tmp == data_end, one byte beyond the region filled by skb_header_pointer(). irc_buffer is kmalloc'd as MAX_SEARCH_SIZE + 1 bytes and datalen is capped at MAX_SEARCH_SIZE, so the stray read does not fault. The byte is uninitialized or stale; if it contains an ASCII digit, simple_strtoul will consume it and produce a wrong DCC IP or port in the conntrack expectation. The extra allocation byte is also a fragile guard: if the cap or allocation size changes, this becomes a real out-of-bounds read. Change the loop and its post-loop check to use strict less-than, consistent with the caller's exclusive-end convention. Update the function comment accordingly.
02KernelScan AI Analysis
Risk summary
A remote attacker can send a crafted IRC packet to trigger a one-byte out-of-bounds read in the nf_conntrack_irc helper. The stray byte may influence parsed DCC connection parameters, potentially creating incorrect conntrack expectations.
Vulnerability analysis
The IRC conntrack helper's DCC parser treats its end-of-buffer pointer as inclusive, but the caller passes an exclusive (one-past-end) pointer. When a packet lacks a newline terminator, the search loop reads one byte beyond the data filled from the packet, hitting an uninitialized or stale byte in the helper's scratch buffer. If that byte is an ASCII digit, the subsequent numeric parse produces an incorrect DCC IP or port, leading to a wrong conntrack expectation. The fix changes the loop and post-loop check to strict less-than comparisons, matching the caller's exclusive-end convention. The vulnerable code path is reached when the kernel processes IRC traffic with the nf_conntrack_irc module loaded, which an attacker can trigger by sending a specially crafted IRC packet through the host.
Lifecycle
03Fix Versions
| Branch | Introduced | Fixed in | Patch commit |
|---|---|---|---|
| 5.10 | 2.6.12 | 5.10.261 | abb8c32b88ea |
| 5.15 | 2.6.12 | 5.15.212 | 437e0a3854b3 |
| 6.12 | 2.6.12 | 6.12.97 | 2393f0bd7a46 |
| 6.18 | 2.6.12 | 6.18.40 | aff589556ed7 |
| 6.6 | 2.6.12 | 6.6.145 | 2b70f61f569b |
| 6.1 | 2.6.12 | 6.1.178 | 910c33e4a8c0 |
| 7.1 | 2.6.12 | 7.1.5 | eeef3b81f449 |
| mainline | 2.6.12 | 7.2 | ef6400ca25a1 |
| cip/4.19 | 2.6.12 | 4.19.325-cip136 | e62354ad65d4 |
| cip/4.19-rt | 2.6.12 | 4.19.325-cip136-rt50 | e62354ad65d4 |
| cip/4.4 | 2.6.12 | 4.4.302-cip115 | 843160c4a887 |
| cip/4.4-rt | 2.6.12 | 4.4.302-cip115-rt63 | 843160c4a887 |
| cip/5.10 | 2.6.12 | 5.10.263-cip76 | abb8c32b88ea |
| cip/5.10-rt | 2.6.12 | 5.10.268-cip77-rt34 | abb8c32b88ea |
| cip/6.1 | 2.6.12 | 6.1.182-cip59 | 910c33e4a8c0 |
| cip/6.1-rt | 2.6.12 | 6.1.182-cip59-rt31 | 910c33e4a8c0 |
| cip/6.12 | 2.6.12 | 6.12.101-cip29 | 2393f0bd7a46 |