CVE-2026-90240 (GCVE-0-2026-90240)
Vulnerability from cvelistv5
Published
2026-09-17 16:07
Modified
2026-10-21 12:50
Summary
In the Linux kernel, the following vulnerability has been resolved: iommu/vt-d: Flush context cache with correct SID when tearing down aliases domain_context_clear_one() and device_pasid_table_teardown() are both invoked once per DMA alias of a device. Each function locates the context entry using the bus/devfn pair provided by the pci_for_each_dma_alias() callback, then calls intel_context_flush_no_pasid(), which constructs a device-selective context-cache invalidation from info->bus and info->devfn (that is, always the requester ID of the device itself). As a result, for every alias other than the device’s own RID, the context entry that was just cleared in memory is never invalidated in the context cache. Hardware may continue using that stale cached entry. In the scalable-mode teardown path, intel_pasid_free_table() can then free the PASID directory still referenced by that stale entry, allowing the IOMMU to walk freed memory. Fix this by passing the source ID of the entry being torn down to intel_context_flush_no_pasid(), instead of deriving it from @info.
Impacted products
Vendor Product Version
Linux Linux Version: f90584f4beb84211c4d21b319cc13f391fe9f3c2
Version: f90584f4beb84211c4d21b319cc13f391fe9f3c2
Version: f90584f4beb84211c4d21b319cc13f391fe9f3c2
Version: f90584f4beb84211c4d21b319cc13f391fe9f3c2
Create a notification for this product.
Show details on NVD website


{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "drivers/iommu/intel/iommu.c",
            "drivers/iommu/intel/iommu.h",
            "drivers/iommu/intel/pasid.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "3eb6ad14ef359e426cff14942e220de101cdbe84",
              "status": "affected",
              "version": "f90584f4beb84211c4d21b319cc13f391fe9f3c2",
              "versionType": "git"
            },
            {
              "lessThan": "a803141597d61dc0511f7cd849625e17d042ca8a",
              "status": "affected",
              "version": "f90584f4beb84211c4d21b319cc13f391fe9f3c2",
              "versionType": "git"
            },
            {
              "lessThan": "5baddf100b3be730912485648cbaae5e3a251923",
              "status": "affected",
              "version": "f90584f4beb84211c4d21b319cc13f391fe9f3c2",
              "versionType": "git"
            },
            {
              "lessThan": "c54e4ae971b98e8d650400137d332cee56c03f55",
              "status": "affected",
              "version": "f90584f4beb84211c4d21b319cc13f391fe9f3c2",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/iommu/intel/iommu.c",
            "drivers/iommu/intel/iommu.h",
            "drivers/iommu/intel/pasid.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.11"
            },
            {
              "lessThan": "6.11",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.114",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.52",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.2.*",
              "status": "unaffected",
              "version": "7.2.6",
              "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": "6.12.114",
                  "versionStartIncluding": "6.11",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.52",
                  "versionStartIncluding": "6.11",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.6",
                  "versionStartIncluding": "6.11",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3",
                  "versionStartIncluding": "6.11",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\niommu/vt-d: Flush context cache with correct SID when tearing down aliases\n\ndomain_context_clear_one() and device_pasid_table_teardown() are both\ninvoked once per DMA alias of a device. Each function locates the context\nentry using the bus/devfn pair provided by the pci_for_each_dma_alias()\ncallback, then calls intel_context_flush_no_pasid(), which constructs a\ndevice-selective context-cache invalidation from info-\u003ebus and\ninfo-\u003edevfn (that is, always the requester ID of the device itself).\n\nAs a result, for every alias other than the device\u2019s own RID, the context\nentry that was just cleared in memory is never invalidated in the context\ncache. Hardware may continue using that stale cached entry. In the\nscalable-mode teardown path, intel_pasid_free_table() can then free the\nPASID directory still referenced by that stale entry, allowing the IOMMU\nto walk freed memory.\n\nFix this by passing the source ID of the entry being torn down to\nintel_context_flush_no_pasid(), instead of deriving it from @info."
        }
      ],
      "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 - domain_context_clear_one() and device_pasid_table_teardown() run from local VFIO_DEVICE_DETACH_IOMMUFD_PT/ATTACH_IOMMUFD_PT (vfio_df_ioctl_detach_pt \u2192 iommufd_device_detach \u2192 blocking_domain_attach_dev \u2192 device_block_translation) and from intel_iommu_release_device on PCI removal. The bug is intel_context_flush_no_pasid() using the wrong SID, not bytes from a remote protocol.\nAC:L - For every pci_for_each_dma_alias() RID other than info-\u003ebus/info-\u003edevfn, intel_context_flush_no_pasid() issues DMA_CCMD_DEVICE_INVL with the device\u0027s own RID, so the alias context-cache entry is never invalidated. A VFIO user who owns a dma_alias_mask or PCI-bridge-aliased device then DMAs with that alias SID; there is no uncontrolled race.\nPR:L - vfio_device_fops_unl_ioctl handles VFIO_DEVICE_DETACH_IOMMUFD_PT with no capable() check; vfio_group_fops_open requires CAP_SYS_RAWIO only for VFIO_NO_IOMMU groups. A tenant VMM with a passed-through aliased PCI device (device-file access, not init-namespace root) can detach while keeping DMA active.\nUI:N - The attacker issues VFIO_DEVICE_DETACH_IOMMUFD_PT or closes the vfio device fd themselves, then continues DMA using the unflushed alias RID. No separate victim action such as mounting a filesystem is required.\nS:C - After the missed alias-SID flush, hardware keeps a Present context for that RID while intel_pasid_free_table() (scalable mode) or domain teardown (legacy domain_context_clear_one) frees the PASID directory or page tables. The IOMMU then walks those freed translation structures for device DMA, crossing the VT-d DMA isolation boundary.\nC:H - A stale cached context for the alias SID still points at the PASID directory that intel_pasid_free_table() just freed, or at second-level page tables already torn down. Device DMA with that RID is translated through attacker-influencable freed pages, reading host memory outside the assigned domain.\nI:H - The same leftover cached page-table or PASID-directory pointer for the unflushed alias SID lets the device DMA-write host memory that software has already freed or reassigned, giving an arbitrary cross-domain write primitive.\nA:H - IOMMU walks of the freed PASID directory or page tables via the stale alias-SID context cause DMAR faults, translation failures, and host oops/panic; the commit documents hardware continuing to use that cached entry after teardown."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-10-21T12:50:36.295Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/3eb6ad14ef359e426cff14942e220de101cdbe84"
        },
        {
          "url": "https://git.kernel.org/stable/c/a803141597d61dc0511f7cd849625e17d042ca8a"
        },
        {
          "url": "https://git.kernel.org/stable/c/5baddf100b3be730912485648cbaae5e3a251923"
        },
        {
          "url": "https://git.kernel.org/stable/c/c54e4ae971b98e8d650400137d332cee56c03f55"
        }
      ],
      "title": "iommu/vt-d: Flush context cache with correct SID when tearing down aliases",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-90240",
    "datePublished": "2026-09-17T16:07:44.445Z",
    "dateReserved": "2026-09-11T19:38:34.795Z",
    "dateUpdated": "2026-10-21T12:50:36.295Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2"
}


Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

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…