FKIE_CVE-2026-80787
Vulnerability from fkie_nvd - Published: 2026-09-04 16:18 - Updated: 2026-09-04 16:18
Severity
Summary
In the Linux kernel, the following vulnerability has been resolved:
nvmet: pci-epf: fix use-after-free in nvmet_pci_epf_exec_iod_work()
nvmet_pci_epf_exec_iod_work() submits an I/O command with req->execute()
and then waits for the command to complete and transfers the data back
to the host. This wait is not needed for commands that do not transfer
data from the device to the host. To decide whether that wait is needed,
it reads iod->data_len and iod->dma_dir after calling req->execute().
However, once req->execute() is called, the command may complete
asynchronously on another CPU. For commands that do not require a
device-to-host data transfer, nvmet_pci_epf_queue_response() calls
nvmet_pci_epf_complete_iod() directly, which can free the iod before it
reads iod->data_len and iod->dma_dir, resulting in the KFENCE use-after-
free:
BUG: KFENCE: use-after-free read in nvmet_pci_epf_exec_iod_work+0x288/0x798 [nvmet_pci_epf]
Use-after-free read at 0x00000000fdfa6d03 (in kfence-#63):
nvmet_pci_epf_exec_iod_work+0x288/0x798 [nvmet_pci_epf]
process_one_work+0x15c/0x4f0
worker_thread+0x18c/0x30c
kthread+0x130/0x140
ret_from_fork+0x10/0x20
kfence-#63: 0x00000000e3de0e71-0x00000000c938ad62, size=712, cache=kmalloc-1k
allocated by task 10 on cpu 0 at 73.995480s (0.005122s ago):
mempool_kmalloc+0x1c/0x28
mempool_alloc_noprof+0x40/0x9c
nvmet_pci_epf_poll_sqs_work+0xd4/0x344 [nvmet_pci_epf]
process_one_work+0x15c/0x4f0
worker_thread+0x18c/0x30c
kthread+0x130/0x140
ret_from_fork+0x10/0x20
freed by task 131 on cpu 3 at 73.995521s (0.008385s ago):
mempool_kfree+0x10/0x20
mempool_free+0x44/0x64
nvmet_pci_epf_free_iod+0x88/0x98 [nvmet_pci_epf]
nvmet_pci_epf_cq_work+0xfc/0x280 [nvmet_pci_epf]
process_one_work+0x15c/0x4f0
worker_thread+0x18c/0x30c
kthread+0x130/0x140
ret_from_fork+0x10/0x20
Fix this by referring to iod->data_len and iod->dma_dir before calling
req->execute(). The remaining iod accesses such as iod->status are only
reached on the device-to-host read path. In this case,
nvmet_pci_epf_queue_response() signals iod->done instead of freeing the
iod, so the iod stays valid.
References
Impacted products
| Vendor | Product | Version |
|---|
{
"affected": [
{
"affectedData": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"drivers/nvme/target/pci-epf.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "20be486d1c225402b067391e72ff5b0dd8ebff76",
"status": "affected",
"version": "0faa0fe6f90ea59b10d1b0f15ce0eb0c18eff186",
"versionType": "git"
},
{
"lessThan": "1ed1eeaef55cebf2d74b3ef104c20bdab719b165",
"status": "affected",
"version": "0faa0fe6f90ea59b10d1b0f15ce0eb0c18eff186",
"versionType": "git"
},
{
"lessThan": "cede8d2852570c79b9bbb9527255ae9ed3317b82",
"status": "affected",
"version": "0faa0fe6f90ea59b10d1b0f15ce0eb0c18eff186",
"versionType": "git"
},
{
"lessThan": "c9e9bb757971485b4e8414b1744507af186d72c9",
"status": "affected",
"version": "0faa0fe6f90ea59b10d1b0f15ce0eb0c18eff186",
"versionType": "git"
}
]
},
{
"defaultStatus": "affected",
"product": "Linux",
"programFiles": [
"drivers/nvme/target/pci-epf.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"status": "affected",
"version": "6.14"
},
{
"lessThan": "6.14",
"status": "unaffected",
"version": "0",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.18.*",
"status": "unaffected",
"version": "6.18.47",
"versionType": "semver"
},
{
"lessThanOrEqual": "7.1.*",
"status": "unaffected",
"version": "7.1.11",
"versionType": "semver"
},
{
"lessThanOrEqual": "7.2.*",
"status": "unaffected",
"version": "7.2.1",
"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\nnvmet: pci-epf: fix use-after-free in nvmet_pci_epf_exec_iod_work()\n\nnvmet_pci_epf_exec_iod_work() submits an I/O command with req-\u003eexecute()\nand then waits for the command to complete and transfers the data back\nto the host. This wait is not needed for commands that do not transfer\ndata from the device to the host. To decide whether that wait is needed,\nit reads iod-\u003edata_len and iod-\u003edma_dir after calling req-\u003eexecute().\n\nHowever, once req-\u003eexecute() is called, the command may complete\nasynchronously on another CPU. For commands that do not require a\ndevice-to-host data transfer, nvmet_pci_epf_queue_response() calls\nnvmet_pci_epf_complete_iod() directly, which can free the iod before it\nreads iod-\u003edata_len and iod-\u003edma_dir, resulting in the KFENCE use-after-\nfree:\n\n BUG: KFENCE: use-after-free read in nvmet_pci_epf_exec_iod_work+0x288/0x798 [nvmet_pci_epf]\n\n Use-after-free read at 0x00000000fdfa6d03 (in kfence-#63):\n nvmet_pci_epf_exec_iod_work+0x288/0x798 [nvmet_pci_epf]\n process_one_work+0x15c/0x4f0\n worker_thread+0x18c/0x30c\n kthread+0x130/0x140\n ret_from_fork+0x10/0x20\n\n kfence-#63: 0x00000000e3de0e71-0x00000000c938ad62, size=712, cache=kmalloc-1k\n\n allocated by task 10 on cpu 0 at 73.995480s (0.005122s ago):\n mempool_kmalloc+0x1c/0x28\n mempool_alloc_noprof+0x40/0x9c\n nvmet_pci_epf_poll_sqs_work+0xd4/0x344 [nvmet_pci_epf]\n process_one_work+0x15c/0x4f0\n worker_thread+0x18c/0x30c\n kthread+0x130/0x140\n ret_from_fork+0x10/0x20\n\n freed by task 131 on cpu 3 at 73.995521s (0.008385s ago):\n mempool_kfree+0x10/0x20\n mempool_free+0x44/0x64\n nvmet_pci_epf_free_iod+0x88/0x98 [nvmet_pci_epf]\n nvmet_pci_epf_cq_work+0xfc/0x280 [nvmet_pci_epf]\n process_one_work+0x15c/0x4f0\n worker_thread+0x18c/0x30c\n kthread+0x130/0x140\n ret_from_fork+0x10/0x20\n\nFix this by referring to iod-\u003edata_len and iod-\u003edma_dir before calling\nreq-\u003eexecute(). The remaining iod accesses such as iod-\u003estatus are only\nreached on the device-to-host read path. In this case,\nnvmet_pci_epf_queue_response() signals iod-\u003edone instead of freeing the\niod, so the iod stays valid."
}
],
"id": "CVE-2026-80787",
"lastModified": "2026-09-04T16:18:04.710",
"metrics": {},
"published": "2026-09-04T16:18:04.710",
"references": [
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/1ed1eeaef55cebf2d74b3ef104c20bdab719b165"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/20be486d1c225402b067391e72ff5b0dd8ebff76"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/c9e9bb757971485b4e8414b1744507af186d72c9"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/cede8d2852570c79b9bbb9527255ae9ed3317b82"
}
],
"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…