tcp: ipv6: clamp default adverting MSS to avoid GSO_BY_FRAGS (0xFFFF)
- 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 5.10.261, 5.15.212, 6.1.178, 6.6.145, 6.12.97, and 2 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
- Exploitation: none
- Automatable: yes
- Technical impact: partial
Summary
In the Linux kernel, the following vulnerability has been resolved: tcp: ipv6: clamp default adverting MSS to avoid GSO_BY_FRAGS (0xFFFF) When MTU is large, ip6_default_advmss() can return IPV6_MAXPLEN (65535). This is interpreted by TCP as mss_clamp, allowing the MSS to reach 65535. However, 0xFFFF is also used as a magic value GSO_BY_FRAGS in the kernel. If a TCP packet with gso_size=0xFFFF is passed to skb_segment(), it will be mistakenly treated as GSO_BY_FRAGS, leading to a NULL pointer dereference because local TCP packets do not use frag_list. Fix this by returning min(IPV6_MAXPLEN, GSO_BY_FRAGS - 1) (65534) from ip6_default_advmss() when MTU is large. Also update the stale comment in ip6_default_advmss() which suggested that IPV6_MAXPLEN is returned to mean "any MSS".
Timeline
- CVE published
- CISA SSVC assessment
Exploitation: none · Automatable: yes · Technical impact: partial
- Record last updated
Affected versions
- Linux Linux
From 3953c46c3ac7eef31a9935427371c6f54a22f1ba · fixed in 560b33b434e922ef97f9ff23aa2e909ef7aacd5c; From 3953c46c3ac7eef31a9935427371c6f54a22f1ba · fixed in 21f69ac1879bb970588d5e7c12a96e6542f7c1a7; From 3953c46c3ac7eef31a9935427371c6f54a22f1ba · fixed in c0db3dc2ac323b6c4b76adede3b355a9daa6dea8; From 3953c46c3ac7eef31a9935427371c6f54a22f1ba · fixed in 572fff10819dfc359298d1f774839e76a4d96f93; From 3953c46c3ac7eef31a9935427371c6f54a22f1ba · fixed in 8e6214a530c03e341dc1b0a846c8f2b716b3551a; From 3953c46c3ac7eef31a9935427371c6f54a22f1ba · fixed in d774cdbda6634a78d0f2baf201ee5a8c57f3bc0e; From 3953c46c3ac7eef31a9935427371c6f54a22f1ba · fixed in a210791f33345aa87187f7d7a9f3b9b7f4a28e6d; From 3953c46c3ac7eef31a9935427371c6f54a22f1ba · fixed in 2bf43d0e2e6a27d52a7d624e2d6b9116972e8a22
- Linux Linux
4.8
- KernelLinux
From 4.8.0 · fixed in 5.10.261; From 5.11.0 · fixed in 5.15.212; From 5.16.0 · fixed in 6.1.178; From 6.2.0 · fixed in 6.6.145; From 6.7.0 · fixed in 6.12.97; From 6.13.0 · fixed in 6.18.40; From 6.19.0 · fixed in 7.1.5
References 8
git.kernel.org
- stable/c/560b33b434e922ef97f9ff23aa2e909ef7aacd5c
- stable/c/21f69ac1879bb970588d5e7c12a96e6542f7c1a7
- stable/c/c0db3dc2ac323b6c4b76adede3b355a9daa6dea8
- stable/c/572fff10819dfc359298d1f774839e76a4d96f93
- stable/c/8e6214a530c03e341dc1b0a846c8f2b716b3551a
- stable/c/d774cdbda6634a78d0f2baf201ee5a8c57f3bc0e
- stable/c/a210791f33345aa87187f7d7a9f3b9b7f4a28e6d
- stable/c/2bf43d0e2e6a27d52a7d624e2d6b9116972e8a22