CVE-2023-54043 (GCVE-0-2023-54043)
Vulnerability from cvelistv5
Published
2025-12-24 12:22
Modified
2026-10-15 21:41
Severity ?
VLAI Severity ?
EPSS score ?
Summary
In the Linux kernel, the following vulnerability has been resolved:
iommufd: Do not add the same hwpt to the ioas->hwpt_list twice
The hwpt is added to the hwpt_list only during its creation, it is never
added again. This hunk is some missed leftover from rework. Adding it
twice will corrupt the linked list in some cases.
It effects HWPT specific attachment, which is something the test suite
cannot cover until we can create a legitimate struct device with a
non-system iommu "driver" (ie we need the bus removed from the iommu code)
References
Impacted products
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2023-54043",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-10-15T21:38:00.478369Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-10-15T21:41:38.411Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"drivers/iommu/iommufd/device.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "c44adefdcf472f946f0632f4e0ddcbf3e00b8516",
"status": "affected",
"version": "e8d57210035b6377d424ba964961892d01127cf6",
"versionType": "git"
},
{
"lessThan": "b4ff830eca097df51af10a9be29e8cc817327919",
"status": "affected",
"version": "e8d57210035b6377d424ba964961892d01127cf6",
"versionType": "git"
}
]
},
{
"defaultStatus": "affected",
"product": "Linux",
"programFiles": [
"drivers/iommu/iommufd/device.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"status": "affected",
"version": "6.2"
},
{
"lessThan": "6.2",
"status": "unaffected",
"version": "0",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.2.*",
"status": "unaffected",
"version": "6.2.3",
"versionType": "semver"
},
{
"lessThanOrEqual": "*",
"status": "unaffected",
"version": "6.3",
"versionType": "original_commit_for_fix"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.2.3",
"versionStartIncluding": "6.2",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.3",
"versionStartIncluding": "6.2",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\niommufd: Do not add the same hwpt to the ioas-\u003ehwpt_list twice\n\nThe hwpt is added to the hwpt_list only during its creation, it is never\nadded again. This hunk is some missed leftover from rework. Adding it\ntwice will corrupt the linked list in some cases.\n\nIt effects HWPT specific attachment, which is something the test suite\ncannot cover until we can create a legitimate struct device with a\nnon-system iommu \"driver\" (ie we need the bus removed from the iommu code)"
}
],
"metrics": [
{
"cvssV3_1": {
"baseScore": 8.8,
"baseSeverity": "HIGH",
"vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H",
"version": "3.1"
},
"scenarios": [
{
"lang": "en",
"value": "AV:L - The vulnerable path is entered only through ioctls on the local `/dev/iommu` character device and a VFIO device fd (`vfio_iommufd_physical_attach_ioas()` \u2192 `iommufd_device_attach()`). There is no network or adjacent-network exposure.\nAC:L - There is no race window and no dependence on memory layout the attacker cannot shape \u2014 the duplicate `list_add_tail()` on an already-linked `hwpt_item` executes deterministically on every hw_pagetable-targeted attach, and the follow-on UAF is reached by an ordinary attacker-chosen attach/detach/attach ioctl sequence with standard heap grooming.\nPR:L - An unprivileged local account that has been granted device-passthrough access \u2014 the normal configuration for a QEMU/libvirt VM user on a virtualization host, where `/dev/iommu` (mode 0660) and the VFIO device nodes are group-accessible \u2014 can perform every required ioctl; no CAP_SYS_ADMIN or root in the init namespace is needed.\nUI:N - The entire sequence (bind device, attach to IOAS, attach to the returned hw_pagetable, detach, re-enumerate) is issued by the attacker\u0027s own process. No victim action or interaction is required.\nS:C - iommufd is the control plane for IOMMU/DMA isolation, and the corruption lets a device end up attached to a freed or attacker-shaped `iommu_domain` via `iommufd_device_do_attach()` \u2192 `iommu_attach_group(hwpt-\u003edomain, ...)`, defeating the DMA translation boundary that protects host memory from the passthrough device and the guest that owns it.\nC:H - After `list_del()` leaves `ioas-\u003ehwpt_list.next` dangling at the freed hwpt, every later list walk reads a use-after-free `struct iommufd_hw_pagetable`; since that object is a sprayable `kzalloc(GFP_KERNEL_ACCOUNT)` allocation, the attacker gains a read primitive over reclaimed kernel memory, and a bogus `hwpt-\u003edomain` additionally exposes host memory to device DMA.\nI:H - The corrupted list yields both a write primitive (a later `list_add_tail` stores kernel pointers into the reclaimed allocation) and an indirect call through `hwpt-\u003edomain-\u003eops-\u003eenforce_cache_coherency()` on freed, attacker-controlled memory, which is a control-flow hijack and full kernel-integrity compromise.\nA:H - The self-referential node makes `list_for_each_entry()` in `iommufd_device_auto_get_domain()` and `iommufd_vfio_cc_iommu()` never terminate while holding `ioas-\u003emutex`, producing an unkillable soft lockup and a permanently wedged mutex, and the use-after-free independently causes oopses and panics."
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-08-05T09:16:43.725Z",
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux"
},
"references": [
{
"url": "https://git.kernel.org/stable/c/c44adefdcf472f946f0632f4e0ddcbf3e00b8516"
},
{
"url": "https://git.kernel.org/stable/c/b4ff830eca097df51af10a9be29e8cc817327919"
}
],
"title": "iommufd: Do not add the same hwpt to the ioas-\u003ehwpt_list twice",
"x_generator": {
"engine": "bippy-1.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"assignerShortName": "Linux",
"cveId": "CVE-2023-54043",
"datePublished": "2025-12-24T12:22:55.392Z",
"dateReserved": "2025-12-24T10:53:46.181Z",
"dateUpdated": "2026-10-15T21:41:38.411Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"vulnerability-lookup:meta": {
"vulnrichment": {
"containers": "{\"adp\": [{\"title\": \"CISA ADP Vulnrichment\", \"metrics\": [{\"other\": {\"type\": \"ssvc\", \"content\": {\"id\": \"CVE-2023-54043\", \"role\": \"CISA Coordinator\", \"options\": [{\"Exploitation\": \"none\"}, {\"Automatable\": \"no\"}, {\"Technical Impact\": \"total\"}], \"version\": \"2.0.3\", \"timestamp\": \"2026-10-15T21:38:00.478369Z\"}}}], \"providerMetadata\": {\"orgId\": \"134c704f-9b21-4f2e-91b3-4a467353bcc0\", \"shortName\": \"CISA-ADP\", \"dateUpdated\": \"2026-10-15T21:38:00.972Z\"}}], \"cna\": {\"title\": \"iommufd: Do not add the same hwpt to the ioas-\u003ehwpt_list twice\", \"metrics\": [{\"cvssV3_1\": {\"version\": \"3.1\", \"baseScore\": 8.8, \"baseSeverity\": \"HIGH\", \"vectorString\": \"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H\"}, \"scenarios\": [{\"lang\": \"en\", \"value\": \"AV:L - The vulnerable path is entered only through ioctls on the local `/dev/iommu` character device and a VFIO device fd (`vfio_iommufd_physical_attach_ioas()` \\u2192 `iommufd_device_attach()`). There is no network or adjacent-network exposure.\\nAC:L - There is no race window and no dependence on memory layout the attacker cannot shape \\u2014 the duplicate `list_add_tail()` on an already-linked `hwpt_item` executes deterministically on every hw_pagetable-targeted attach, and the follow-on UAF is reached by an ordinary attacker-chosen attach/detach/attach ioctl sequence with standard heap grooming.\\nPR:L - An unprivileged local account that has been granted device-passthrough access \\u2014 the normal configuration for a QEMU/libvirt VM user on a virtualization host, where `/dev/iommu` (mode 0660) and the VFIO device nodes are group-accessible \\u2014 can perform every required ioctl; no CAP_SYS_ADMIN or root in the init namespace is needed.\\nUI:N - The entire sequence (bind device, attach to IOAS, attach to the returned hw_pagetable, detach, re-enumerate) is issued by the attacker\u0027s own process. No victim action or interaction is required.\\nS:C - iommufd is the control plane for IOMMU/DMA isolation, and the corruption lets a device end up attached to a freed or attacker-shaped `iommu_domain` via `iommufd_device_do_attach()` \\u2192 `iommu_attach_group(hwpt-\u003edomain, ...)`, defeating the DMA translation boundary that protects host memory from the passthrough device and the guest that owns it.\\nC:H - After `list_del()` leaves `ioas-\u003ehwpt_list.next` dangling at the freed hwpt, every later list walk reads a use-after-free `struct iommufd_hw_pagetable`; since that object is a sprayable `kzalloc(GFP_KERNEL_ACCOUNT)` allocation, the attacker gains a read primitive over reclaimed kernel memory, and a bogus `hwpt-\u003edomain` additionally exposes host memory to device DMA.\\nI:H - The corrupted list yields both a write primitive (a later `list_add_tail` stores kernel pointers into the reclaimed allocation) and an indirect call through `hwpt-\u003edomain-\u003eops-\u003eenforce_cache_coherency()` on freed, attacker-controlled memory, which is a control-flow hijack and full kernel-integrity compromise.\\nA:H - The self-referential node makes `list_for_each_entry()` in `iommufd_device_auto_get_domain()` and `iommufd_vfio_cc_iommu()` never terminate while holding `ioas-\u003emutex`, producing an unkillable soft lockup and a permanently wedged mutex, and the use-after-free independently causes oopses and panics.\"}]}], \"affected\": [{\"repo\": \"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\", \"vendor\": \"Linux\", \"product\": \"Linux\", \"versions\": [{\"status\": \"affected\", \"version\": \"e8d57210035b6377d424ba964961892d01127cf6\", \"lessThan\": \"c44adefdcf472f946f0632f4e0ddcbf3e00b8516\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"e8d57210035b6377d424ba964961892d01127cf6\", \"lessThan\": \"b4ff830eca097df51af10a9be29e8cc817327919\", \"versionType\": \"git\"}], \"programFiles\": [\"drivers/iommu/iommufd/device.c\"], \"defaultStatus\": \"unaffected\"}, {\"repo\": \"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\", \"vendor\": \"Linux\", \"product\": \"Linux\", \"versions\": [{\"status\": \"affected\", \"version\": \"6.2\"}, {\"status\": \"unaffected\", \"version\": \"0\", \"lessThan\": \"6.2\", \"versionType\": \"semver\"}, {\"status\": \"unaffected\", \"version\": \"6.2.3\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"6.2.*\"}, {\"status\": \"unaffected\", \"version\": \"6.3\", \"versionType\": \"original_commit_for_fix\", \"lessThanOrEqual\": \"*\"}], \"programFiles\": [\"drivers/iommu/iommufd/device.c\"], \"defaultStatus\": \"affected\"}], \"references\": [{\"url\": \"https://git.kernel.org/stable/c/c44adefdcf472f946f0632f4e0ddcbf3e00b8516\"}, {\"url\": \"https://git.kernel.org/stable/c/b4ff830eca097df51af10a9be29e8cc817327919\"}], \"x_generator\": {\"engine\": \"bippy-1.2.0\"}, \"descriptions\": [{\"lang\": \"en\", \"value\": \"In the Linux kernel, the following vulnerability has been resolved:\\n\\niommufd: Do not add the same hwpt to the ioas-\u003ehwpt_list twice\\n\\nThe hwpt is added to the hwpt_list only during its creation, it is never\\nadded again. This hunk is some missed leftover from rework. Adding it\\ntwice will corrupt the linked list in some cases.\\n\\nIt effects HWPT specific attachment, which is something the test suite\\ncannot cover until we can create a legitimate struct device with a\\nnon-system iommu \\\"driver\\\" (ie we need the bus removed from the iommu code)\"}], \"cpeApplicability\": [{\"nodes\": [{\"negate\": false, \"cpeMatch\": [{\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.2.3\", \"versionStartIncluding\": \"6.2\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.3\", \"versionStartIncluding\": \"6.2\"}], \"operator\": \"OR\"}]}], \"providerMetadata\": {\"orgId\": \"416baaa9-dc9f-4396-8d5f-8c081fb06d67\", \"shortName\": \"Linux\", \"dateUpdated\": \"2026-08-05T09:16:43.725Z\"}}}",
"cveMetadata": "{\"cveId\": \"CVE-2023-54043\", \"state\": \"PUBLISHED\", \"dateUpdated\": \"2026-10-15T21:41:38.411Z\", \"dateReserved\": \"2025-12-24T10:53:46.181Z\", \"assignerOrgId\": \"416baaa9-dc9f-4396-8d5f-8c081fb06d67\", \"datePublished\": \"2025-12-24T12:22:55.392Z\", \"assignerShortName\": \"Linux\"}",
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
}
}
Loading…
Loading…
Sightings
| Author | Source | Type | Date |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
- Confirmed: The vulnerability is confirmed from an analyst perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
- Patched: This vulnerability was successfully patched by the user reporting the sighting.
- Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
- Not confirmed: The user expresses doubt about the veracity of the vulnerability.
- Not patched: This vulnerability was not successfully patched by the user reporting the sighting.
Loading…
Loading…