iommu/vt-d: Clear Present bit before tearing down scalable-mode context entry
In the Linux kernel, the following vulnerability has been resolved: iommu/vt-d: Clear Present bit before tearing down scalable-mode context entry device_pasid_table_teardown() zeroes the 128-bit scalable-mode context entry with context_clear_entry() while the Present bit is still set. This creates a window where the hardware can fetch a torn entry, with some fields already zeroed while Present is still set, leading to unpredictable behavior or spurious faults. The context-cache invalidation is issued only after the entry has been zeroed, and intel_pasid_free_table() then frees the PASID directory pages, so the IOMMU can keep walking a stale Present=1 entry that points at freed memory. While x86 provides strong write ordering, the compiler may reorder the two 64-bit writes to the entry, and the hardware fetch is not guaranteed to be atomic with respect to multiple CPU writes. Commit c1e4f1dccbe9d ("iommu/vt-d: Clear Present bit before tearing down context entry") fixed this exact pattern in domain_context_clear_one() and the copied-context path, but device_pasid_table_teardown() was not converted. Align it with the "Guidance to Software for Invalidations" in the VT-d spec, Section 6.5.3.3, using the same ownership handshake as the sibling fix: clear only the Present bit, flush it to the IOMMU, perform the context-cache invalidation, and only then zero the rest of the entry.
- Products
- Kernel
- Affected versions
- Not specified
- Fixed versions
- 6.12.97, 6.18.40, 7.1.5
- CVEs
- CVE-2026-74439
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 2 Nov 2026, 18:48 UTC · Revision 1
Source evidence
iommu/vt-d: Clear Present bit before tearing down scalable-mode context entry
core-osv · Original sourcePublished 15 Aug 2026, 05:59 UTC
In the Linux kernel, the following vulnerability has been resolved: iommu/vt-d: Clear Present bit before tearing down scalable-mode context entry device_pasid_table_teardown() zeroes the 128-bit scalable-mode context entry with context_clear_entry() while the Present bit is still set. This creates a window where the hardware can fetch a torn entry, with some fields already zeroed while Present is still set, leading to unpredictable behavior or spurious faults. The context-cache invalidation is issued only after the entry has been zeroed, and intel_pasid_free_table() then frees the PASID directory pages, so the IOMMU can keep walking a stale Present=1 entry that points at freed memory. While x86 provides strong write ordering, the compiler may reorder the two 64-bit writes to the entry, and the hardware fetch is not guaranteed to be atomic with respect to multiple CPU writes. Commit c1e4f1dccbe9d ("iommu/vt-d: Clear Present bit before tearing down context entry") fixed this exact pattern in domain_context_clear_one() and the copied-context path, but device_pasid_table_teardown() was not converted. Align it with the "Guidance to Software for Invalidations" in the VT-d spec, Section 6.5.3.3, using the same ownership handshake as the sibling fix: clear only the Present bit, flush it to the IOMMU, perform the context-cache invalidation, and only then zero the rest of the entry.
osv:CVE-2026-74439
Kernel
Fixed versions: 6.12.97, 6.18.40, 7.1.5
Complete source record
{
"id": "a4247492caad64fa4f5eff8f6134fd89c0082150cb4021bdfea28638e49c613f",
"url": "https://osv.dev/vulnerability/CVE-2026-74439",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "iommu/vt-d: Clear Present bit before tearing down scalable-mode context entry",
"summary": "In the Linux kernel, the following vulnerability has been resolved: iommu/vt-d: Clear Present bit before tearing down scalable-mode context entry device_pasid_table_teardown() zeroes the 128-bit scalable-mode context entry with context_clear_entry() while the Present bit is still set. This creates a window where the hardware can fetch a torn entry, with some fields already zeroed while Present is still set, leading to unpredictable behavior or spurious faults. The context-cache invalidation is issued only after the entry has been zeroed, and intel_pasid_free_table() then frees the PASID directory pages, so the IOMMU can keep walking a stale Present=1 entry that points at freed memory. While x86 provides strong write ordering, the compiler may reorder the two 64-bit writes to the entry, and the hardware fetch is not guaranteed to be atomic with respect to multiple CPU writes. Commit c1e4f1dccbe9d (\"iommu/vt-d: Clear Present bit before tearing down context entry\") fixed this exact pattern in domain_context_clear_one() and the copied-context path, but device_pasid_table_teardown() was not converted. Align it with the \"Guidance to Software for Invalidations\" in the VT-d spec, Section 6.5.3.3, using the same ownership handshake as the sibling fix: clear only the Present bit, flush it to the IOMMU, perform the context-cache invalidation, and only then zero the rest of the entry.",
"evidence": "osv:CVE-2026-74439",
"products": [
{
"name": {
"value": "Kernel",
"evidence": "/affected/1/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "6.12.97",
"evidence": "/affected/1/ranges"
},
{
"value": "6.18.40",
"evidence": "/affected/1/ranges"
},
{
"value": "7.1.5",
"evidence": "/affected/1/ranges"
}
],
"affected_versions": []
}
],
"severity": "critical",
"structured": {
"id": "CVE-2026-74439",
"aliases": [
"CVE-2026-74439"
],
"metrics": [
{
"type": "CVSS_V3",
"score": "CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H"
}
],
"affected": [
{
"ranges": [
{
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"type": "GIT",
"events": [
{
"introduced": "81e921fd321614c2ad8ac333b041aae1da7a1c6d"
},
{
"fixed": "e9e83bcfe37dc719182500dd823c03ab57d934f0"
},
{
"fixed": "588718101e8449605f1c7e858fecb7cfa701cdab"
},
{
"fixed": "7fd4077dc92b91b1b844333c0a06bb9e286db10a"
},
{
"fixed": "f46452c3df7a8d8a5addc0926e76ef19ea7da0a0"
}
]
},
{
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"type": "GIT",
"events": [
{
"introduced": "6.8.2"
},
{
"fixed": "6.9"
}
]
},
{
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"type": "GIT",
"events": [
{
"introduced": "333fe86968482ca701c609af590003bcea450e8f"
}
]
}
],
"versions": [
"v6.8.12",
"v6.8.11",
"v6.8.10",
"v6.8.9",
"v6.8.8",
"v6.8.7",
"v6.8.6",
"v6.8.5",
"v6.8.4",
"v6.8.3",
"v6.8.2"
],
"database_specific": {
"source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-74439.json"
}
},
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "6.9.0"
},
{
"fixed": "6.12.97"
}
]
},
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "6.13.0"
},
{
"fixed": "6.18.40"
}
]
},
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "6.19.0"
},
{
"fixed": "7.1.5"
}
]
}
],
"package": {
"name": "Kernel",
"ecosystem": "Linux"
},
"database_specific": {
"source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-74439.json"
}
}
],
"modified": "2026-10-28T02:30:22.327044225Z",
"provider": "osv",
"references": [
"https://git.kernel.org/stable/c/588718101e8449605f1c7e858fecb7cfa701cdab",
"https://git.kernel.org/stable/c/7fd4077dc92b91b1b844333c0a06bb9e286db10a",
"https://git.kernel.org/stable/c/e9e83bcfe37dc719182500dd823c03ab57d934f0",
"https://git.kernel.org/stable/c/f46452c3df7a8d8a5addc0926e76ef19ea7da0a0",
"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/74xxx/CVE-2026-74439.json",
"https://nvd.nist.gov/vuln/detail/CVE-2026-74439",
"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/74xxx/CVE-2026-74439.json"
}
},
"related_cves": [
{
"value": "CVE-2026-74439",
"evidence": "/id"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 488770,
"published_at": "2026-08-15T05:59:36.655+00:00"
}