FKIE_CVE-2026-89483
Vulnerability from fkie_nvd - Published: 2026-09-11 20:19 - Updated: 2026-09-14 13:19
Severity
Summary
In the Linux kernel, the following vulnerability has been resolved:
nvme: zero the discard fallback page
nvme_setup_discard() always maps sizeof(struct nvme_dsm_range) *
NVME_DSM_MAX_RANGES = 4096 bytes as the DSM payload however many ranges
the command declares, because some devices ignore the 'Number of Ranges'
field - the Fixes: commit records two that read past the declared ranges.
A single-range discard fills only the first 16 bytes.
Normally the buffer comes from kzalloc() and the other 4080 bytes are
zero. When that allocation fails the code falls back to the
per-controller ctrl->discard_page, which nvme_init_ctrl() obtains with
alloc_page(GFP_KERNEL) and nothing ever zeroes, so those 4080 bytes are
whatever the page last held and are handed to the controller. Reaching
it requires the kzalloc(GFP_ATOMIC | __GFP_NOWARN) to fail, that is
memory pressure; it is not remotely triggerable. Failing the allocation
under KMSAN reproduces it, with the leaked tail full of vmemmap struct
page pointers. The extent in the report is a partial transfer of the
payload, not the whole 4096 bytes; the 16-byte boundary in it is the one
declared range:
[ 11.991601] BUG: KMSAN: uninit-value in dma_map_phys+0x14c8/0x1900
[ 11.991969] dma_map_phys+0x14c8/0x1900
[ 11.992220] dma_map_page_attrs+0xcf/0x130
[ 11.992485] e1000_xmit_frame+0x4099/0x6d10
[ 11.992768] dev_hard_start_xmit+0x22f/0xa80
[ 11.993068] sch_direct_xmit+0x35c/0xcb0
[ 11.993315] __dev_queue_xmit+0x1ee5/0x5eb0
[ 11.993608] ip_finish_output2+0x1903/0x1c30
[ 11.993881] ip_finish_output+0x288/0x870
[ 11.994125] ip_output+0x15e/0x400
[ 11.994365] __ip_queue_xmit+0x1e85/0x1fb0
[ 11.994639] ip_queue_xmit+0x60/0x80
[ 11.994899] __tcp_transmit_skb+0x4e71/0x5fa0
[ 11.995210] tcp_write_xmit+0x3a36/0x9160
[ 11.995533] __tcp_push_pending_frames+0xc5/0x3c0
[ 11.995854] tcp_push+0x7dc/0x840
[ 11.996076] tcp_sendmsg_locked+0x766c/0x8400
[ 11.996371] tcp_sendmsg+0x4b/0x90
[ 11.996572] inet_sendmsg+0x134/0x2a0
[ 11.996823] __sock_sendmsg+0x265/0x360
[ 11.997076] sock_sendmsg+0x100/0x1e0
[ 11.997293] nvme_tcp_try_send+0x196f/0x6370
[ 11.997605] nvme_tcp_queue_rq+0x1d54/0x20b0
[ 11.997882] blk_mq_dispatch_rq_list+0x5ee/0x2e50
[ 11.998175] __blk_mq_sched_dispatch_requests+0x16dc/0x24a0
[ 11.998539] blk_mq_sched_dispatch_requests+0x11b/0x2c0
[ 11.998865] blk_mq_run_work_fn+0x13b/0x280
[ 11.999146] process_scheduled_works+0x966/0x1ad0
[ 11.999465] worker_thread+0xe44/0x1480
[ 11.999709] kthread+0x53b/0x600
[ 11.999927] ret_from_fork+0x29f/0x7c0
[ 12.000191] ret_from_fork_asm+0x1a/0x30
[ 12.000460]
[ 12.000558] Uninit was created at:
[ 12.000788] __alloc_frozen_pages_noprof+0x8bf/0xd30
[ 12.001096] alloc_pages_mpol+0x1d0/0x5f0
[ 12.001326] alloc_pages_noprof+0x102/0x290
[ 12.001627] nvme_init_ctrl+0x5a3/0x9f0
[ 12.001891] nvme_tcp_create_ctrl+0xd75/0x19b0
[ 12.002170] nvmf_dev_write+0x4c68/0x4fd0
[ 12.002426] vfs_write+0x587/0x1a10
[ 12.002636] __x64_sys_write+0x207/0x4f0
[ 12.002874] x64_sys_call+0x2ff0/0x3ea0
[ 12.003123] do_syscall_64+0x147/0x3b0
[ 12.003400] entry_SYSCALL_64_after_hwframe+0x77/0x7f
[ 12.003680]
[ 12.003777] Bytes 16-2843 of 2844 are uninitialized
[ 12.004068] Memory access of size 2844 starts at ffff888109f82000
[ 12.004412]
[ 12.004530] CPU: 0 UID: 0 PID: 101 Comm: kworker/0:1H Not tainted 7.2.0-rc5-NVMECTL-gf5098b6bae76 #1 PREEMPT(lazy)
[ 12.005127] Hardware 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
[ 12.005762] Workqueue: kblockd blk_mq_run_work_fn
[ 12.006073] =====================================================
Allocate the page with __GFP_ZERO. The single allocation site covers
every use of it: bytes no discard has written stay zero, and bytes one
did write hold that controller's own range list, which it has already
been sent.
References
Impacted products
| Vendor | Product | Version |
|---|
{
"affected": [
{
"affectedData": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"drivers/nvme/host/core.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "76139b5bbf531e675934b97227be3521c7fdd537",
"status": "affected",
"version": "530436c45ef2e446c12538a400e465929a0b3ade",
"versionType": "git"
},
{
"lessThan": "3f84d2bd0d8ae8c7e8e0f8fc3cbf018a282971a1",
"status": "affected",
"version": "530436c45ef2e446c12538a400e465929a0b3ade",
"versionType": "git"
},
{
"lessThan": "415f2772ebcbc7f3f1ab1a71915dab82cee3465e",
"status": "affected",
"version": "530436c45ef2e446c12538a400e465929a0b3ade",
"versionType": "git"
},
{
"lessThan": "66b5af23b6f956e57f8205c46aa80b054631be34",
"status": "affected",
"version": "530436c45ef2e446c12538a400e465929a0b3ade",
"versionType": "git"
},
{
"lessThan": "dc4d4b70a863f7e39ef8bd137634be4e6db8b084",
"status": "affected",
"version": "530436c45ef2e446c12538a400e465929a0b3ade",
"versionType": "git"
},
{
"lessThan": "67551d8430df94c827e1830bd3a5fae1f66a5219",
"status": "affected",
"version": "530436c45ef2e446c12538a400e465929a0b3ade",
"versionType": "git"
},
{
"lessThan": "f5827817b4fc7feeabf4f53fb4b626e6edc52fef",
"status": "affected",
"version": "530436c45ef2e446c12538a400e465929a0b3ade",
"versionType": "git"
},
{
"lessThan": "bededeaaeff404978a5a8e2a605a6c3017cddd3e",
"status": "affected",
"version": "530436c45ef2e446c12538a400e465929a0b3ade",
"versionType": "git"
},
{
"status": "affected",
"version": "ffa56cbdd2409b522b4cb56461bea1c45889417b",
"versionType": "git"
},
{
"status": "affected",
"version": "8b0acb768a06083b0d28bace1481c1f6679e76f4",
"versionType": "git"
},
{
"lessThan": "4.20",
"status": "affected",
"version": "4.19.92",
"versionType": "semver"
},
{
"lessThan": "5.5",
"status": "affected",
"version": "5.4.7",
"versionType": "semver"
}
]
},
{
"defaultStatus": "affected",
"product": "Linux",
"programFiles": [
"drivers/nvme/host/core.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"status": "affected",
"version": "5.5"
},
{
"lessThan": "5.5",
"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-rc1",
"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: zero the discard fallback page\n\nnvme_setup_discard() always maps sizeof(struct nvme_dsm_range) *\nNVME_DSM_MAX_RANGES = 4096 bytes as the DSM payload however many ranges\nthe command declares, because some devices ignore the \u0027Number of Ranges\u0027\nfield - the Fixes: commit records two that read past the declared ranges.\nA single-range discard fills only the first 16 bytes.\n\nNormally the buffer comes from kzalloc() and the other 4080 bytes are\nzero. When that allocation fails the code falls back to the\nper-controller ctrl-\u003ediscard_page, which nvme_init_ctrl() obtains with\nalloc_page(GFP_KERNEL) and nothing ever zeroes, so those 4080 bytes are\nwhatever the page last held and are handed to the controller. Reaching\nit requires the kzalloc(GFP_ATOMIC | __GFP_NOWARN) to fail, that is\nmemory pressure; it is not remotely triggerable. Failing the allocation\nunder KMSAN reproduces it, with the leaked tail full of vmemmap struct\npage pointers. The extent in the report is a partial transfer of the\npayload, not the whole 4096 bytes; the 16-byte boundary in it is the one\ndeclared range:\n\n[ 11.991601] BUG: KMSAN: uninit-value in dma_map_phys+0x14c8/0x1900\n[ 11.991969] dma_map_phys+0x14c8/0x1900\n[ 11.992220] dma_map_page_attrs+0xcf/0x130\n[ 11.992485] e1000_xmit_frame+0x4099/0x6d10\n[ 11.992768] dev_hard_start_xmit+0x22f/0xa80\n[ 11.993068] sch_direct_xmit+0x35c/0xcb0\n[ 11.993315] __dev_queue_xmit+0x1ee5/0x5eb0\n[ 11.993608] ip_finish_output2+0x1903/0x1c30\n[ 11.993881] ip_finish_output+0x288/0x870\n[ 11.994125] ip_output+0x15e/0x400\n[ 11.994365] __ip_queue_xmit+0x1e85/0x1fb0\n[ 11.994639] ip_queue_xmit+0x60/0x80\n[ 11.994899] __tcp_transmit_skb+0x4e71/0x5fa0\n[ 11.995210] tcp_write_xmit+0x3a36/0x9160\n[ 11.995533] __tcp_push_pending_frames+0xc5/0x3c0\n[ 11.995854] tcp_push+0x7dc/0x840\n[ 11.996076] tcp_sendmsg_locked+0x766c/0x8400\n[ 11.996371] tcp_sendmsg+0x4b/0x90\n[ 11.996572] inet_sendmsg+0x134/0x2a0\n[ 11.996823] __sock_sendmsg+0x265/0x360\n[ 11.997076] sock_sendmsg+0x100/0x1e0\n[ 11.997293] nvme_tcp_try_send+0x196f/0x6370\n[ 11.997605] nvme_tcp_queue_rq+0x1d54/0x20b0\n[ 11.997882] blk_mq_dispatch_rq_list+0x5ee/0x2e50\n[ 11.998175] __blk_mq_sched_dispatch_requests+0x16dc/0x24a0\n[ 11.998539] blk_mq_sched_dispatch_requests+0x11b/0x2c0\n[ 11.998865] blk_mq_run_work_fn+0x13b/0x280\n[ 11.999146] process_scheduled_works+0x966/0x1ad0\n[ 11.999465] worker_thread+0xe44/0x1480\n[ 11.999709] kthread+0x53b/0x600\n[ 11.999927] ret_from_fork+0x29f/0x7c0\n[ 12.000191] ret_from_fork_asm+0x1a/0x30\n[ 12.000460]\n[ 12.000558] Uninit was created at:\n[ 12.000788] __alloc_frozen_pages_noprof+0x8bf/0xd30\n[ 12.001096] alloc_pages_mpol+0x1d0/0x5f0\n[ 12.001326] alloc_pages_noprof+0x102/0x290\n[ 12.001627] nvme_init_ctrl+0x5a3/0x9f0\n[ 12.001891] nvme_tcp_create_ctrl+0xd75/0x19b0\n[ 12.002170] nvmf_dev_write+0x4c68/0x4fd0\n[ 12.002426] vfs_write+0x587/0x1a10\n[ 12.002636] __x64_sys_write+0x207/0x4f0\n[ 12.002874] x64_sys_call+0x2ff0/0x3ea0\n[ 12.003123] do_syscall_64+0x147/0x3b0\n[ 12.003400] entry_SYSCALL_64_after_hwframe+0x77/0x7f\n[ 12.003680]\n[ 12.003777] Bytes 16-2843 of 2844 are uninitialized\n[ 12.004068] Memory access of size 2844 starts at ffff888109f82000\n[ 12.004412]\n[ 12.004530] CPU: 0 UID: 0 PID: 101 Comm: kworker/0:1H Not tainted 7.2.0-rc5-NVMECTL-gf5098b6bae76 #1 PREEMPT(lazy)\n[ 12.005127] Hardware 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\n[ 12.005762] Workqueue: kblockd blk_mq_run_work_fn\n[ 12.006073] =====================================================\n\nAllocate the page with __GFP_ZERO. The single allocation site covers\nevery use of it: bytes no discard has written stay zero, and bytes one\ndid write hold that controller\u0027s own range list, which it has already\nbeen sent."
}
],
"id": "CVE-2026-89483",
"lastModified": "2026-09-14T13:19:05.107",
"metrics": {
"cvssMetricV31": [
{
"cvssData": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "NONE",
"baseScore": 7.5,
"baseSeverity": "HIGH",
"confidentialityImpact": "HIGH",
"integrityImpact": "NONE",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N",
"version": "3.1"
},
"exploitabilityScore": 3.9,
"impactScore": 3.6,
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"type": "Secondary"
}
]
},
"published": "2026-09-11T20:19:29.880",
"references": [
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/3f84d2bd0d8ae8c7e8e0f8fc3cbf018a282971a1"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/415f2772ebcbc7f3f1ab1a71915dab82cee3465e"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/66b5af23b6f956e57f8205c46aa80b054631be34"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/67551d8430df94c827e1830bd3a5fae1f66a5219"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/76139b5bbf531e675934b97227be3521c7fdd537"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/bededeaaeff404978a5a8e2a605a6c3017cddd3e"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/dc4d4b70a863f7e39ef8bd137634be4e6db8b084"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/f5827817b4fc7feeabf4f53fb4b626e6edc52fef"
}
],
"sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"vulnStatus": "Received"
}
Loading…
Loading…
Experimental. This forecast is provided for visualization only and may change without notice. Do not use it for operational decisions.
Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.
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.
Loading…
The MITRE ATT&CK techniques below are AI-generated suggestions, inferred from the description of the
vulnerability by the CIRCL/vulnerability-attack-technique-classification-roberta-base
model, served locally by ML-Gateway.
They have not been verified by an analyst and are provided for guidance only.
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.
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.
Loading…
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.
Loading…