CVE-2026-89482 (GCVE-0-2026-89482)
Vulnerability from cvelistv5 – Published: 2026-09-11 19:43 – Updated: 2026-10-19 08:47| Vendor | Product | Version | CPE status | |
|---|---|---|---|---|
| Linux | Linux |
Affected:
25e5cb780e62bde432b401f312bb847edc78b432 , < 32ea8ce96b9bd797c59c351ce490ffd97adaa8c0
(git)
Affected: 25e5cb780e62bde432b401f312bb847edc78b432 , < dd8906bb8f8d5bf1c9f861e1382c82b87bfe7cab (git) Affected: 25e5cb780e62bde432b401f312bb847edc78b432 , < 7ed0b61bbc145988be292c4d3ec580aebd8d2bcd (git) Affected: 25e5cb780e62bde432b401f312bb847edc78b432 , < b96e1ff75e5c0ad6e077ac002b1d30b0a2b49528 (git) Affected: 25e5cb780e62bde432b401f312bb847edc78b432 , < b36161701cb366f416afdcf70771d432a7c74753 (git) Affected: 25e5cb780e62bde432b401f312bb847edc78b432 , < 6a01b58263108eaf9869bb6f82f07709240c6589 (git) Affected: 25e5cb780e62bde432b401f312bb847edc78b432 , < 641ad3a30ba560f0a9a610376c568d7b75d2a2aa (git) Affected: 25e5cb780e62bde432b401f312bb847edc78b432 , < 3a4aa9e6ad3e35f8e24d5eaf38ee4d437075fb36 (git) Affected: f507ae6e33cbe56c4e3fe000434fc0ecc263d098 (git) Affected: b1458c16f4e26e87492e58e4d24a1873bd09232a (git) Affected: 5.4.36 , < 5.5 (semver) Affected: 5.6.8 , < 5.7 (semver) |
guessed | |
| Linux | Linux |
Affected:
5.7
Unaffected: 0 , < 5.7 (semver) Unaffected: 5.10.270 , ≤ 5.10.* (semver) Unaffected: 5.15.221 , ≤ 5.15.* (semver) Unaffected: 6.1.188 , ≤ 6.1.* (semver) Unaffected: 6.6.157 , ≤ 6.6.* (semver) Unaffected: 6.12.109 , ≤ 6.12.* (semver) Unaffected: 6.18.50 , ≤ 6.18.* (semver) Unaffected: 7.2.4 , ≤ 7.2.* (semver) Unaffected: 7.3 , ≤ * (original_commit_for_fix) |
guessed |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-89482",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-10-16T19:22:37.965026Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-10-16T19:26:39.839Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"drivers/nvme/host/tcp.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "32ea8ce96b9bd797c59c351ce490ffd97adaa8c0",
"status": "affected",
"version": "25e5cb780e62bde432b401f312bb847edc78b432",
"versionType": "git"
},
{
"lessThan": "dd8906bb8f8d5bf1c9f861e1382c82b87bfe7cab",
"status": "affected",
"version": "25e5cb780e62bde432b401f312bb847edc78b432",
"versionType": "git"
},
{
"lessThan": "7ed0b61bbc145988be292c4d3ec580aebd8d2bcd",
"status": "affected",
"version": "25e5cb780e62bde432b401f312bb847edc78b432",
"versionType": "git"
},
{
"lessThan": "b96e1ff75e5c0ad6e077ac002b1d30b0a2b49528",
"status": "affected",
"version": "25e5cb780e62bde432b401f312bb847edc78b432",
"versionType": "git"
},
{
"lessThan": "b36161701cb366f416afdcf70771d432a7c74753",
"status": "affected",
"version": "25e5cb780e62bde432b401f312bb847edc78b432",
"versionType": "git"
},
{
"lessThan": "6a01b58263108eaf9869bb6f82f07709240c6589",
"status": "affected",
"version": "25e5cb780e62bde432b401f312bb847edc78b432",
"versionType": "git"
},
{
"lessThan": "641ad3a30ba560f0a9a610376c568d7b75d2a2aa",
"status": "affected",
"version": "25e5cb780e62bde432b401f312bb847edc78b432",
"versionType": "git"
},
{
"lessThan": "3a4aa9e6ad3e35f8e24d5eaf38ee4d437075fb36",
"status": "affected",
"version": "25e5cb780e62bde432b401f312bb847edc78b432",
"versionType": "git"
},
{
"status": "affected",
"version": "f507ae6e33cbe56c4e3fe000434fc0ecc263d098",
"versionType": "git"
},
{
"status": "affected",
"version": "b1458c16f4e26e87492e58e4d24a1873bd09232a",
"versionType": "git"
},
{
"lessThan": "5.5",
"status": "affected",
"version": "5.4.36",
"versionType": "semver"
},
{
"lessThan": "5.7",
"status": "affected",
"version": "5.6.8",
"versionType": "semver"
}
]
},
{
"defaultStatus": "affected",
"product": "Linux",
"programFiles": [
"drivers/nvme/host/tcp.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"status": "affected",
"version": "5.7"
},
{
"lessThan": "5.7",
"status": "unaffected",
"version": "0",
"versionType": "semver"
},
{
"lessThanOrEqual": "5.10.*",
"status": "unaffected",
"version": "5.10.270",
"versionType": "semver"
},
{
"lessThanOrEqual": "5.15.*",
"status": "unaffected",
"version": "5.15.221",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.1.*",
"status": "unaffected",
"version": "6.1.188",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.6.*",
"status": "unaffected",
"version": "6.6.157",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.12.*",
"status": "unaffected",
"version": "6.12.109",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.18.*",
"status": "unaffected",
"version": "6.18.50",
"versionType": "semver"
},
{
"lessThanOrEqual": "7.2.*",
"status": "unaffected",
"version": "7.2.4",
"versionType": "semver"
},
{
"lessThanOrEqual": "*",
"status": "unaffected",
"version": "7.3",
"versionType": "original_commit_for_fix"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "5.10.270",
"versionStartIncluding": "5.7",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "5.15.221",
"versionStartIncluding": "5.7",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.1.188",
"versionStartIncluding": "5.7",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.6.157",
"versionStartIncluding": "5.7",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.12.109",
"versionStartIncluding": "5.7",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.18.50",
"versionStartIncluding": "5.7",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.2.4",
"versionStartIncluding": "5.7",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.3",
"versionStartIncluding": "5.7",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "5.4.36",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "5.6.8",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nnvme-tcp: do not accept C2HData based on blk_rq_payload_bytes() alone\n\nCommit 25e5cb780e62 (\"nvme-tcp: fix possible crash in write_zeroes\nprocessing\") established that blk_rq_payload_bytes() must not be read\nwithout first checking blk_rq_nr_phys_segments(), and recorded the\nresult in nvme_tcp_setup_cmd_pdu() as req-\u003edata_len. The receive side\nwas left as it was.\n\nThe two differ for REQ_OP_WRITE_ZEROES, which has no physical segments\nbut a non-zero blk_rq_bytes(), so setup leaves req-\u003eiter untouched\nwhile the receive gate lets a C2HData through and nvme_tcp_recv_data()\ncopies into whatever the previous command on that tag left there. The\ndriver-private area is zeroed only when the tag set is allocated.\n\nReproduced with a test target that leaves a residual iterator on a tag\nand then sends a C2HData for a WRITE_ZEROES command on the same tag:\n\nBUG: KASAN: wild-memory-access in _copy_to_iter+0x642/0x1330\nWrite of size 512 at addr ffe728c2175dfa81 by task kworker/0:1H/103\n\nCPU: 0 UID: 0 PID: 103 Comm: kworker/0:1H Not tainted 7.2.0-rc5-NVMETCP-gf5098b6bae76 #1 PREEMPT(lazy)\nHardware name: QEMU Ubuntu 24.04 PC v2 (i440FX + PIIX, arch_caps fix, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014\nWorkqueue: nvme_tcp_wq nvme_tcp_io_work\nCall Trace:\n \u003cTASK\u003e\n dump_stack_lvl+0x53/0x70\n kasan_report+0xce/0x100\n ? _copy_to_iter+0x642/0x1330\n kasan_check_range+0x105/0x1b0\n __asan_memcpy+0x3c/0x60\n _copy_to_iter+0x642/0x1330\n ? __pfx_sock_has_perm+0x10/0x10\n ? worker_thread+0x45b/0xd10\n ? __pfx__copy_to_iter+0x10/0x10\n ? _raw_spin_lock_bh+0x83/0xe0\n ? __pfx__raw_spin_lock_bh+0x10/0x10\n __skb_datagram_iter+0xf3/0x820\n ? __pfx_simple_copy_to_iter+0x10/0x10\n ? __asan_memcpy+0x3c/0x60\n ? skb_copy_bits+0x58d/0x830\n skb_copy_datagram_iter+0x37/0x120\n nvme_tcp_recv_skb+0xa07/0x4320\n ? __pfx_nvme_tcp_recv_skb+0x10/0x10\n __tcp_read_sock+0x1ab/0x810\n ? __pfx_nvme_tcp_recv_skb+0x10/0x10\n ? __pfx_lock_sock_nested+0x10/0x10\n ? __pfx___tcp_read_sock+0x10/0x10\n nvme_tcp_try_recv+0x152/0x1e0\n ? __pfx_nvme_tcp_try_recv+0x10/0x10\n ? __pfx_mutex_unlock+0x10/0x10\n nvme_tcp_io_work+0x1e4/0x6c0\n ? __schedule+0x181a/0x49f0\n ? __pfx_nvme_tcp_io_work+0x10/0x10\n process_one_work+0x633/0x1030\n\nKeep the blk_rq_payload_bytes() test and add req-\u003edata_len to it. The\nold test is what rejects a C2HData naming a tag that is no longer in\nflight, because blk_update_request() zeroes rq-\u003e__data_len on\ncompletion; req-\u003edata_len and req-\u003ecurr_bio are driver-private and\nsurvive completion, so they cannot stand in for it. Setup initialises\nthe iterator only when both req-\u003ecurr_bio and req-\u003edata_len are set, so\nthe gate now tests the same two."
}
],
"metrics": [
{
"cvssV3_1": {
"baseScore": 9.8,
"baseSeverity": "CRITICAL",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
"version": "3.1"
},
"scenarios": [
{
"lang": "en",
"value": "AV:N - The nvme-tcp host receive path parses C2HData PDUs from a remote NVMe/TCP target over a routable TCP connection (typically port 4420); a malicious or compromised target, or an on-path attacker injecting into the stream, triggers the bug from the network.\nAC:L - A malicious target can advertise WRITE_ZEROES, wait for tag reuse after a data command, and send C2HData for that in-flight WRITE_ZEROES; leftover iterator state is deterministic because driver-private fields are not cleared on reuse, so no race or memory-layout luck is required.\nPR:N - NVMe/TCP authentication (TLS, DH-HMAC-CHAP) is optional and off by default; the vulnerable copy runs on C2HData from the connected peer, which needs no credentials or privileges on the victim host.\nUI:N - Once the host is connected to the target as persistent storage, ordinary filesystem and block I/O generate WRITE_ZEROES commands; the attacker sends the crafted PDU without any further victim action.\nS:U - The stale-iterator write corrupts memory in the same host kernel security authority; this is not a VM, IOMMU, or sandbox boundary crossing.\nC:H - nvme_tcp_recv_data() writes attacker-controlled C2HData through a leftover iov_iter into pages from a previously completed command on the same tag, a use-after-free of those buffers that can be turned into an arbitrary read via heap reuse.\nI:H - The copy is a use-after-free / wild write of attacker-chosen contents and length into reused kernel or page-cache memory, which is exploitable for arbitrary write and control-flow hijacking.\nA:H - The same stale-iterator write was reproduced as a KASAN wild-memory-access in _copy_to_iter from nvme_tcp_io_work and can oops or panic the host kernel."
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-10-19T08:47:32.356Z",
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux"
},
"references": [
{
"url": "https://git.kernel.org/stable/c/32ea8ce96b9bd797c59c351ce490ffd97adaa8c0"
},
{
"url": "https://git.kernel.org/stable/c/dd8906bb8f8d5bf1c9f861e1382c82b87bfe7cab"
},
{
"url": "https://git.kernel.org/stable/c/7ed0b61bbc145988be292c4d3ec580aebd8d2bcd"
},
{
"url": "https://git.kernel.org/stable/c/b96e1ff75e5c0ad6e077ac002b1d30b0a2b49528"
},
{
"url": "https://git.kernel.org/stable/c/b36161701cb366f416afdcf70771d432a7c74753"
},
{
"url": "https://git.kernel.org/stable/c/6a01b58263108eaf9869bb6f82f07709240c6589"
},
{
"url": "https://git.kernel.org/stable/c/641ad3a30ba560f0a9a610376c568d7b75d2a2aa"
},
{
"url": "https://git.kernel.org/stable/c/3a4aa9e6ad3e35f8e24d5eaf38ee4d437075fb36"
}
],
"title": "nvme-tcp: do not accept C2HData based on blk_rq_payload_bytes() alone",
"x_generator": {
"engine": "bippy-1.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"assignerShortName": "Linux",
"cveId": "CVE-2026-89482",
"datePublished": "2026-09-11T19:43:37.236Z",
"dateReserved": "2026-09-11T19:38:34.712Z",
"dateUpdated": "2026-10-19T08:47:32.356Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"vulnerability-lookup:meta": {
"epss": {
"cve": "CVE-2026-89482",
"date": "2026-11-13",
"epss": "0.00714",
"percentile": "0.54225"
},
"microsoft_vex": {
"current_release_date": "2026-09-25T01:53:26.000Z",
"cve": "CVE-2026-89482",
"id": "msrc_CVE-2026-89482",
"initial_release_date": "2026-09-13T01:04:57.000Z",
"product_status:fixed": "1",
"product_status:known_affected": "2",
"source": "Microsoft CSAF VEX",
"status": "final",
"title": "nvme-tcp: do not accept C2HData based on blk_rq_payload_bytes() alone",
"url": "https://msrc.microsoft.com/csaf/vex/2026/msrc_cve-2026-89482.json",
"version": "5"
},
"nvd": {
"cve": {
"affected": [
{
"affectedData": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"drivers/nvme/host/tcp.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "32ea8ce96b9bd797c59c351ce490ffd97adaa8c0",
"status": "affected",
"version": "25e5cb780e62bde432b401f312bb847edc78b432",
"versionType": "git"
},
{
"lessThan": "dd8906bb8f8d5bf1c9f861e1382c82b87bfe7cab",
"status": "affected",
"version": "25e5cb780e62bde432b401f312bb847edc78b432",
"versionType": "git"
},
{
"lessThan": "7ed0b61bbc145988be292c4d3ec580aebd8d2bcd",
"status": "affected",
"version": "25e5cb780e62bde432b401f312bb847edc78b432",
"versionType": "git"
},
{
"lessThan": "b96e1ff75e5c0ad6e077ac002b1d30b0a2b49528",
"status": "affected",
"version": "25e5cb780e62bde432b401f312bb847edc78b432",
"versionType": "git"
},
{
"lessThan": "b36161701cb366f416afdcf70771d432a7c74753",
"status": "affected",
"version": "25e5cb780e62bde432b401f312bb847edc78b432",
"versionType": "git"
},
{
"lessThan": "6a01b58263108eaf9869bb6f82f07709240c6589",
"status": "affected",
"version": "25e5cb780e62bde432b401f312bb847edc78b432",
"versionType": "git"
},
{
"lessThan": "641ad3a30ba560f0a9a610376c568d7b75d2a2aa",
"status": "affected",
"version": "25e5cb780e62bde432b401f312bb847edc78b432",
"versionType": "git"
},
{
"lessThan": "3a4aa9e6ad3e35f8e24d5eaf38ee4d437075fb36",
"status": "affected",
"version": "25e5cb780e62bde432b401f312bb847edc78b432",
"versionType": "git"
},
{
"status": "affected",
"version": "f507ae6e33cbe56c4e3fe000434fc0ecc263d098",
"versionType": "git"
},
{
"status": "affected",
"version": "b1458c16f4e26e87492e58e4d24a1873bd09232a",
"versionType": "git"
},
{
"lessThan": "5.5",
"status": "affected",
"version": "5.4.36",
"versionType": "semver"
},
{
"lessThan": "5.7",
"status": "affected",
"version": "5.6.8",
"versionType": "semver"
}
]
},
{
"defaultStatus": "affected",
"product": "Linux",
"programFiles": [
"drivers/nvme/host/tcp.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"status": "affected",
"version": "5.7"
},
{
"lessThan": "5.7",
"status": "unaffected",
"version": "0",
"versionType": "semver"
},
{
"lessThanOrEqual": "5.10.*",
"status": "unaffected",
"version": "5.10.270",
"versionType": "semver"
},
{
"lessThanOrEqual": "5.15.*",
"status": "unaffected",
"version": "5.15.221",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.1.*",
"status": "unaffected",
"version": "6.1.188",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.6.*",
"status": "unaffected",
"version": "6.6.157",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.12.*",
"status": "unaffected",
"version": "6.12.109",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.18.*",
"status": "unaffected",
"version": "6.18.50",
"versionType": "semver"
},
{
"lessThanOrEqual": "7.2.*",
"status": "unaffected",
"version": "7.2.4",
"versionType": "semver"
},
{
"lessThanOrEqual": "*",
"status": "unaffected",
"version": "7.3",
"versionType": "original_commit_for_fix"
}
]
}
],
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
}
],
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nnvme-tcp: do not accept C2HData based on blk_rq_payload_bytes() alone\n\nCommit 25e5cb780e62 (\"nvme-tcp: fix possible crash in write_zeroes\nprocessing\") established that blk_rq_payload_bytes() must not be read\nwithout first checking blk_rq_nr_phys_segments(), and recorded the\nresult in nvme_tcp_setup_cmd_pdu() as req-\u003edata_len. The receive side\nwas left as it was.\n\nThe two differ for REQ_OP_WRITE_ZEROES, which has no physical segments\nbut a non-zero blk_rq_bytes(), so setup leaves req-\u003eiter untouched\nwhile the receive gate lets a C2HData through and nvme_tcp_recv_data()\ncopies into whatever the previous command on that tag left there. The\ndriver-private area is zeroed only when the tag set is allocated.\n\nReproduced with a test target that leaves a residual iterator on a tag\nand then sends a C2HData for a WRITE_ZEROES command on the same tag:\n\nBUG: KASAN: wild-memory-access in _copy_to_iter+0x642/0x1330\nWrite of size 512 at addr ffe728c2175dfa81 by task kworker/0:1H/103\n\nCPU: 0 UID: 0 PID: 103 Comm: kworker/0:1H Not tainted 7.2.0-rc5-NVMETCP-gf5098b6bae76 #1 PREEMPT(lazy)\nHardware name: QEMU Ubuntu 24.04 PC v2 (i440FX + PIIX, arch_caps fix, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014\nWorkqueue: nvme_tcp_wq nvme_tcp_io_work\nCall Trace:\n \u003cTASK\u003e\n dump_stack_lvl+0x53/0x70\n kasan_report+0xce/0x100\n ? _copy_to_iter+0x642/0x1330\n kasan_check_range+0x105/0x1b0\n __asan_memcpy+0x3c/0x60\n _copy_to_iter+0x642/0x1330\n ? __pfx_sock_has_perm+0x10/0x10\n ? worker_thread+0x45b/0xd10\n ? __pfx__copy_to_iter+0x10/0x10\n ? _raw_spin_lock_bh+0x83/0xe0\n ? __pfx__raw_spin_lock_bh+0x10/0x10\n __skb_datagram_iter+0xf3/0x820\n ? __pfx_simple_copy_to_iter+0x10/0x10\n ? __asan_memcpy+0x3c/0x60\n ? skb_copy_bits+0x58d/0x830\n skb_copy_datagram_iter+0x37/0x120\n nvme_tcp_recv_skb+0xa07/0x4320\n ? __pfx_nvme_tcp_recv_skb+0x10/0x10\n __tcp_read_sock+0x1ab/0x810\n ? __pfx_nvme_tcp_recv_skb+0x10/0x10\n ? __pfx_lock_sock_nested+0x10/0x10\n ? __pfx___tcp_read_sock+0x10/0x10\n nvme_tcp_try_recv+0x152/0x1e0\n ? __pfx_nvme_tcp_try_recv+0x10/0x10\n ? __pfx_mutex_unlock+0x10/0x10\n nvme_tcp_io_work+0x1e4/0x6c0\n ? __schedule+0x181a/0x49f0\n ? __pfx_nvme_tcp_io_work+0x10/0x10\n process_one_work+0x633/0x1030\n\nKeep the blk_rq_payload_bytes() test and add req-\u003edata_len to it. The\nold test is what rejects a C2HData naming a tag that is no longer in\nflight, because blk_update_request() zeroes rq-\u003e__data_len on\ncompletion; req-\u003edata_len and req-\u003ecurr_bio are driver-private and\nsurvive completion, so they cannot stand in for it. Setup initialises\nthe iterator only when both req-\u003ecurr_bio and req-\u003edata_len are set, so\nthe gate now tests the same two."
}
],
"id": "CVE-2026-89482",
"lastModified": "2026-10-19T09:17:41.540",
"metrics": {
"cvssMetricV31": [
{
"cvssData": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 9.8,
"baseSeverity": "CRITICAL",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
"version": "3.1"
},
"exploitabilityScore": 3.9,
"impactScore": 5.9,
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"type": "Secondary"
}
],
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"id": "CVE-2026-89482",
"options": [
{
"exploitation": "none"
},
{
"automatable": "yes"
},
{
"technicalImpact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-10-16T19:22:37.965026Z",
"version": "2.0.3"
}
}
]
},
"published": "2026-09-11T20:19:29.730",
"references": [
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/32ea8ce96b9bd797c59c351ce490ffd97adaa8c0"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/3a4aa9e6ad3e35f8e24d5eaf38ee4d437075fb36"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/641ad3a30ba560f0a9a610376c568d7b75d2a2aa"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/6a01b58263108eaf9869bb6f82f07709240c6589"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/7ed0b61bbc145988be292c4d3ec580aebd8d2bcd"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/b36161701cb366f416afdcf70771d432a7c74753"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/b96e1ff75e5c0ad6e077ac002b1d30b0a2b49528"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/dd8906bb8f8d5bf1c9f861e1382c82b87bfe7cab"
}
],
"sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"vulnStatus": "Received"
}
},
"redhat_vex": {
"aggregate_severity": "Moderate",
"current_release_date": "2026-11-06T01:16:01+00:00",
"cve": "CVE-2026-89482",
"id": "CVE-2026-89482",
"initial_release_date": "2026-09-11T00:00:00+00:00",
"product_status:known_affected": "161",
"product_status:known_not_affected": "42",
"source": "Red Hat CSAF VEX",
"status": "final",
"title": "kernel: nvme-tcp: do not accept C2HData based on blk_rq_payload_bytes() alone",
"url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-89482.json",
"version": "3"
},
"vulnrichment": {
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-89482",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-10-16T19:22:37.965026Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-10-16T19:22:38.509Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"drivers/nvme/host/tcp.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "32ea8ce96b9bd797c59c351ce490ffd97adaa8c0",
"status": "affected",
"version": "25e5cb780e62bde432b401f312bb847edc78b432",
"versionType": "git"
},
{
"lessThan": "dd8906bb8f8d5bf1c9f861e1382c82b87bfe7cab",
"status": "affected",
"version": "25e5cb780e62bde432b401f312bb847edc78b432",
"versionType": "git"
},
{
"lessThan": "7ed0b61bbc145988be292c4d3ec580aebd8d2bcd",
"status": "affected",
"version": "25e5cb780e62bde432b401f312bb847edc78b432",
"versionType": "git"
},
{
"lessThan": "b96e1ff75e5c0ad6e077ac002b1d30b0a2b49528",
"status": "affected",
"version": "25e5cb780e62bde432b401f312bb847edc78b432",
"versionType": "git"
},
{
"lessThan": "b36161701cb366f416afdcf70771d432a7c74753",
"status": "affected",
"version": "25e5cb780e62bde432b401f312bb847edc78b432",
"versionType": "git"
},
{
"lessThan": "6a01b58263108eaf9869bb6f82f07709240c6589",
"status": "affected",
"version": "25e5cb780e62bde432b401f312bb847edc78b432",
"versionType": "git"
},
{
"lessThan": "641ad3a30ba560f0a9a610376c568d7b75d2a2aa",
"status": "affected",
"version": "25e5cb780e62bde432b401f312bb847edc78b432",
"versionType": "git"
},
{
"lessThan": "3a4aa9e6ad3e35f8e24d5eaf38ee4d437075fb36",
"status": "affected",
"version": "25e5cb780e62bde432b401f312bb847edc78b432",
"versionType": "git"
},
{
"status": "affected",
"version": "f507ae6e33cbe56c4e3fe000434fc0ecc263d098",
"versionType": "git"
},
{
"status": "affected",
"version": "b1458c16f4e26e87492e58e4d24a1873bd09232a",
"versionType": "git"
},
{
"lessThan": "5.5",
"status": "affected",
"version": "5.4.36",
"versionType": "semver"
},
{
"lessThan": "5.7",
"status": "affected",
"version": "5.6.8",
"versionType": "semver"
}
]
},
{
"defaultStatus": "affected",
"product": "Linux",
"programFiles": [
"drivers/nvme/host/tcp.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"status": "affected",
"version": "5.7"
},
{
"lessThan": "5.7",
"status": "unaffected",
"version": "0",
"versionType": "semver"
},
{
"lessThanOrEqual": "5.10.*",
"status": "unaffected",
"version": "5.10.270",
"versionType": "semver"
},
{
"lessThanOrEqual": "5.15.*",
"status": "unaffected",
"version": "5.15.221",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.1.*",
"status": "unaffected",
"version": "6.1.188",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.6.*",
"status": "unaffected",
"version": "6.6.157",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.12.*",
"status": "unaffected",
"version": "6.12.109",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.18.*",
"status": "unaffected",
"version": "6.18.50",
"versionType": "semver"
},
{
"lessThanOrEqual": "7.2.*",
"status": "unaffected",
"version": "7.2.4",
"versionType": "semver"
},
{
"lessThanOrEqual": "*",
"status": "unaffected",
"version": "7.3",
"versionType": "original_commit_for_fix"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "5.10.270",
"versionStartIncluding": "5.7",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "5.15.221",
"versionStartIncluding": "5.7",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.1.188",
"versionStartIncluding": "5.7",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.6.157",
"versionStartIncluding": "5.7",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.12.109",
"versionStartIncluding": "5.7",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.18.50",
"versionStartIncluding": "5.7",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.2.4",
"versionStartIncluding": "5.7",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.3",
"versionStartIncluding": "5.7",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "5.4.36",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "5.6.8",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nnvme-tcp: do not accept C2HData based on blk_rq_payload_bytes() alone\n\nCommit 25e5cb780e62 (\"nvme-tcp: fix possible crash in write_zeroes\nprocessing\") established that blk_rq_payload_bytes() must not be read\nwithout first checking blk_rq_nr_phys_segments(), and recorded the\nresult in nvme_tcp_setup_cmd_pdu() as req-\u003edata_len. The receive side\nwas left as it was.\n\nThe two differ for REQ_OP_WRITE_ZEROES, which has no physical segments\nbut a non-zero blk_rq_bytes(), so setup leaves req-\u003eiter untouched\nwhile the receive gate lets a C2HData through and nvme_tcp_recv_data()\ncopies into whatever the previous command on that tag left there. The\ndriver-private area is zeroed only when the tag set is allocated.\n\nReproduced with a test target that leaves a residual iterator on a tag\nand then sends a C2HData for a WRITE_ZEROES command on the same tag:\n\nBUG: KASAN: wild-memory-access in _copy_to_iter+0x642/0x1330\nWrite of size 512 at addr ffe728c2175dfa81 by task kworker/0:1H/103\n\nCPU: 0 UID: 0 PID: 103 Comm: kworker/0:1H Not tainted 7.2.0-rc5-NVMETCP-gf5098b6bae76 #1 PREEMPT(lazy)\nHardware name: QEMU Ubuntu 24.04 PC v2 (i440FX + PIIX, arch_caps fix, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014\nWorkqueue: nvme_tcp_wq nvme_tcp_io_work\nCall Trace:\n \u003cTASK\u003e\n dump_stack_lvl+0x53/0x70\n kasan_report+0xce/0x100\n ? _copy_to_iter+0x642/0x1330\n kasan_check_range+0x105/0x1b0\n __asan_memcpy+0x3c/0x60\n _copy_to_iter+0x642/0x1330\n ? __pfx_sock_has_perm+0x10/0x10\n ? worker_thread+0x45b/0xd10\n ? __pfx__copy_to_iter+0x10/0x10\n ? _raw_spin_lock_bh+0x83/0xe0\n ? __pfx__raw_spin_lock_bh+0x10/0x10\n __skb_datagram_iter+0xf3/0x820\n ? __pfx_simple_copy_to_iter+0x10/0x10\n ? __asan_memcpy+0x3c/0x60\n ? skb_copy_bits+0x58d/0x830\n skb_copy_datagram_iter+0x37/0x120\n nvme_tcp_recv_skb+0xa07/0x4320\n ? __pfx_nvme_tcp_recv_skb+0x10/0x10\n __tcp_read_sock+0x1ab/0x810\n ? __pfx_nvme_tcp_recv_skb+0x10/0x10\n ? __pfx_lock_sock_nested+0x10/0x10\n ? __pfx___tcp_read_sock+0x10/0x10\n nvme_tcp_try_recv+0x152/0x1e0\n ? __pfx_nvme_tcp_try_recv+0x10/0x10\n ? __pfx_mutex_unlock+0x10/0x10\n nvme_tcp_io_work+0x1e4/0x6c0\n ? __schedule+0x181a/0x49f0\n ? __pfx_nvme_tcp_io_work+0x10/0x10\n process_one_work+0x633/0x1030\n\nKeep the blk_rq_payload_bytes() test and add req-\u003edata_len to it. The\nold test is what rejects a C2HData naming a tag that is no longer in\nflight, because blk_update_request() zeroes rq-\u003e__data_len on\ncompletion; req-\u003edata_len and req-\u003ecurr_bio are driver-private and\nsurvive completion, so they cannot stand in for it. Setup initialises\nthe iterator only when both req-\u003ecurr_bio and req-\u003edata_len are set, so\nthe gate now tests the same two."
}
],
"metrics": [
{
"cvssV3_1": {
"baseScore": 9.8,
"baseSeverity": "CRITICAL",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
"version": "3.1"
},
"scenarios": [
{
"lang": "en",
"value": "AV:N - The nvme-tcp host receive path parses C2HData PDUs from a remote NVMe/TCP target over a routable TCP connection (typically port 4420); a malicious or compromised target, or an on-path attacker injecting into the stream, triggers the bug from the network.\nAC:L - A malicious target can advertise WRITE_ZEROES, wait for tag reuse after a data command, and send C2HData for that in-flight WRITE_ZEROES; leftover iterator state is deterministic because driver-private fields are not cleared on reuse, so no race or memory-layout luck is required.\nPR:N - NVMe/TCP authentication (TLS, DH-HMAC-CHAP) is optional and off by default; the vulnerable copy runs on C2HData from the connected peer, which needs no credentials or privileges on the victim host.\nUI:N - Once the host is connected to the target as persistent storage, ordinary filesystem and block I/O generate WRITE_ZEROES commands; the attacker sends the crafted PDU without any further victim action.\nS:U - The stale-iterator write corrupts memory in the same host kernel security authority; this is not a VM, IOMMU, or sandbox boundary crossing.\nC:H - nvme_tcp_recv_data() writes attacker-controlled C2HData through a leftover iov_iter into pages from a previously completed command on the same tag, a use-after-free of those buffers that can be turned into an arbitrary read via heap reuse.\nI:H - The copy is a use-after-free / wild write of attacker-chosen contents and length into reused kernel or page-cache memory, which is exploitable for arbitrary write and control-flow hijacking.\nA:H - The same stale-iterator write was reproduced as a KASAN wild-memory-access in _copy_to_iter from nvme_tcp_io_work and can oops or panic the host kernel."
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-10-19T08:47:32.356Z",
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux"
},
"references": [
{
"url": "https://git.kernel.org/stable/c/32ea8ce96b9bd797c59c351ce490ffd97adaa8c0"
},
{
"url": "https://git.kernel.org/stable/c/dd8906bb8f8d5bf1c9f861e1382c82b87bfe7cab"
},
{
"url": "https://git.kernel.org/stable/c/7ed0b61bbc145988be292c4d3ec580aebd8d2bcd"
},
{
"url": "https://git.kernel.org/stable/c/b96e1ff75e5c0ad6e077ac002b1d30b0a2b49528"
},
{
"url": "https://git.kernel.org/stable/c/b36161701cb366f416afdcf70771d432a7c74753"
},
{
"url": "https://git.kernel.org/stable/c/6a01b58263108eaf9869bb6f82f07709240c6589"
},
{
"url": "https://git.kernel.org/stable/c/641ad3a30ba560f0a9a610376c568d7b75d2a2aa"
},
{
"url": "https://git.kernel.org/stable/c/3a4aa9e6ad3e35f8e24d5eaf38ee4d437075fb36"
}
],
"title": "nvme-tcp: do not accept C2HData based on blk_rq_payload_bytes() alone",
"x_generator": {
"engine": "bippy-1.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"assignerShortName": "Linux",
"cveId": "CVE-2026-89482",
"datePublished": "2026-09-11T19:43:37.236Z",
"dateReserved": "2026-09-11T19:38:34.712Z",
"dateUpdated": "2026-10-19T08:47:32.356Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
}
}
Drag nodes to arrange them. Double-click a related vulnerability to open it, or a source to visit its link. The Physics button on the left tunes the layout and the simulation; the legend at the bottom left hides or shows nodes by kind and by sighting type.
Sightings
| Author | Source | Type | Date | Other |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
Vulnerability timeline
Sightings and recorded dates, grouped by day · UTC
How durations are calculated
Following the VTEM framework (Black Hat USA 2015), time to patch starts when the vendor or a coordinator was informed, total time to patch at discovery, and disclosure to patch at public disclosure; vendor response time runs from the report to its acknowledgement. Time to exploit and time unpatched start at the earliest discovery or report, falling back to public disclosure. Unpatched time ends at the first recorded patch, or the calculation time when no patch is recorded. Exploitation to patch shows the interval between those two events; a published proof of concept is a public exploit, not exploitation.
Each result shows its source dates. A negative interval means the end event came first; when date-only inputs leave the order open, the result says so. Date-only inputs are approximate. The earliest evidence wins: KEV report dates and sightings are labelled as such. Records describing another vulnerability are listed but never calculated from, and a PoC alone does not establish exploitation. Missing patch evidence does not prove that no patch exists. Filters below change the event list only.
Loading timeline…
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.
Browse all ATT&CK techniques and the vulnerabilities related to each.
Related by attack behaviour
Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.