thunderbolt: Reject oversized XDomain properties responses
In the Linux kernel, the following vulnerability has been resolved: thunderbolt: Reject oversized XDomain properties responses tb_xdp_properties_request() allocates room for 45 data dwords in its 252-byte response buffer. The XDomain length field is six bits wide, however, and a malicious peer can set it to 63. After the fixed response fields are subtracted, the driver treats this as 48 data dwords. Commit 322e93448d90 ("thunderbolt: Clamp XDomain response data copy to allocation size") only bounds the copy against data_len. If data_len is at least 48, memcpy() reads 192 bytes from the 180-byte res->data array, causing a 12-byte heap out-of-bounds read. Commit 4db2bd2ed478 ("thunderbolt: Limit XDomain response copy to actual frame size") limits the earlier copy but does not constrain this header-derived length. Reject response data lengths that exceed the allocated source buffer before copying them into the assembled property block.
- Products
- Kernel
- Affected versions
- Not specified
- Fixed versions
- 5.10.273, 5.15.224, 6.1.191, 6.12.113, 6.18.56, 6.6.160, 7.2.10
- CVEs
- CVE-2026-98687
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 3 Nov 2026, 17:10 UTC · Revision 1
Source evidence
thunderbolt: Reject oversized XDomain properties responses
core-osv · Original sourcePublished 18 Oct 2026, 15:45 UTC
In the Linux kernel, the following vulnerability has been resolved: thunderbolt: Reject oversized XDomain properties responses tb_xdp_properties_request() allocates room for 45 data dwords in its 252-byte response buffer. The XDomain length field is six bits wide, however, and a malicious peer can set it to 63. After the fixed response fields are subtracted, the driver treats this as 48 data dwords. Commit 322e93448d90 ("thunderbolt: Clamp XDomain response data copy to allocation size") only bounds the copy against data_len. If data_len is at least 48, memcpy() reads 192 bytes from the 180-byte res->data array, causing a 12-byte heap out-of-bounds read. Commit 4db2bd2ed478 ("thunderbolt: Limit XDomain response copy to actual frame size") limits the earlier copy but does not constrain this header-derived length. Reject response data lengths that exceed the allocated source buffer before copying them into the assembled property block.
osv:CVE-2026-98687
Kernel
Fixed versions: 5.10.273, 5.15.224, 6.1.191, 6.6.160, 6.12.113, 6.18.56, 7.2.10
Complete source record
{
"id": "a521565ac61d2f950846e7cdb21dfe7496ccb0703b8c630bac06f7599e3ce84d",
"url": "https://osv.dev/vulnerability/CVE-2026-98687",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "thunderbolt: Reject oversized XDomain properties responses",
"summary": "In the Linux kernel, the following vulnerability has been resolved: thunderbolt: Reject oversized XDomain properties responses tb_xdp_properties_request() allocates room for 45 data dwords in its 252-byte response buffer. The XDomain length field is six bits wide, however, and a malicious peer can set it to 63. After the fixed response fields are subtracted, the driver treats this as 48 data dwords. Commit 322e93448d90 (\"thunderbolt: Clamp XDomain response data copy to allocation size\") only bounds the copy against data_len. If data_len is at least 48, memcpy() reads 192 bytes from the 180-byte res->data array, causing a 12-byte heap out-of-bounds read. Commit 4db2bd2ed478 (\"thunderbolt: Limit XDomain response copy to actual frame size\") limits the earlier copy but does not constrain this header-derived length. Reject response data lengths that exceed the allocated source buffer before copying them into the assembled property block.",
"evidence": "osv:CVE-2026-98687",
"products": [
{
"name": {
"value": "Kernel",
"evidence": "/affected/1/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "5.10.273",
"evidence": "/affected/1/ranges"
},
{
"value": "5.15.224",
"evidence": "/affected/1/ranges"
},
{
"value": "6.1.191",
"evidence": "/affected/1/ranges"
},
{
"value": "6.6.160",
"evidence": "/affected/1/ranges"
},
{
"value": "6.12.113",
"evidence": "/affected/1/ranges"
},
{
"value": "6.18.56",
"evidence": "/affected/1/ranges"
},
{
"value": "7.2.10",
"evidence": "/affected/1/ranges"
}
],
"affected_versions": []
}
],
"severity": "unknown",
"structured": {
"id": "CVE-2026-98687",
"aliases": [
"CVE-2026-98687"
],
"affected": [
{
"ranges": [
{
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"type": "GIT",
"events": [
{
"introduced": "d1ff70241a275133e1a0258b7c23588b122276c8"
},
{
"fixed": "9fba032802b5858bc6186b34f8e966429ff155ab"
},
{
"fixed": "7c028d2ae85eca86b82cab1163a9ac1187a2e666"
},
{
"fixed": "37ea4304bd9f57ebe719409f010915495467f05c"
},
{
"fixed": "b270c1074860de74da0d6b5250fb06b359b9d509"
},
{
"fixed": "a766a86ff48acee76aeb8e2575771040749e509d"
},
{
"fixed": "2f97f929dad9eb3e1f63b721d2dd49bf9bc68efa"
},
{
"fixed": "737a1d2e9642d5f718bd29aa4a98b9eef3832f0a"
},
{
"fixed": "80756e263846ab694984e749e8c626897331438f"
}
]
}
],
"database_specific": {
"source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-98687.json"
}
},
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "4.15.0"
},
{
"fixed": "5.10.273"
}
]
},
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "5.11.0"
},
{
"fixed": "5.15.224"
}
]
},
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "5.16.0"
},
{
"fixed": "6.1.191"
}
]
},
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "6.2.0"
},
{
"fixed": "6.6.160"
}
]
},
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "6.7.0"
},
{
"fixed": "6.12.113"
}
]
},
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "6.13.0"
},
{
"fixed": "6.18.56"
}
]
},
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "6.19.0"
},
{
"fixed": "7.2.10"
}
]
}
],
"package": {
"name": "Kernel",
"ecosystem": "Linux"
},
"database_specific": {
"source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-98687.json"
}
}
],
"modified": "2026-11-01T02:30:32.813592273Z",
"provider": "osv",
"references": [
"https://git.kernel.org/stable/c/2f97f929dad9eb3e1f63b721d2dd49bf9bc68efa",
"https://git.kernel.org/stable/c/37ea4304bd9f57ebe719409f010915495467f05c",
"https://git.kernel.org/stable/c/737a1d2e9642d5f718bd29aa4a98b9eef3832f0a",
"https://git.kernel.org/stable/c/7c028d2ae85eca86b82cab1163a9ac1187a2e666",
"https://git.kernel.org/stable/c/80756e263846ab694984e749e8c626897331438f",
"https://git.kernel.org/stable/c/9fba032802b5858bc6186b34f8e966429ff155ab",
"https://git.kernel.org/stable/c/a766a86ff48acee76aeb8e2575771040749e509d",
"https://git.kernel.org/stable/c/b270c1074860de74da0d6b5250fb06b359b9d509",
"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/98xxx/CVE-2026-98687.json",
"https://nvd.nist.gov/vuln/detail/CVE-2026-98687",
"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git"
],
"provider_metadata": {
"cna_assigner": "Linux",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/98xxx/CVE-2026-98687.json"
}
},
"related_cves": [
{
"value": "CVE-2026-98687",
"evidence": "/id"
}
],
"security_relevant": true,
"severity_evidence": null
},
"source_id": "core-osv",
"document_id": 497716,
"published_at": "2026-10-18T15:45:58.719+00:00"
}