2025-10-28 11:48CVE-2025-40058Linux
PUBLISHED5.1

iommu/vt-d: Disallow dirty tracking if incoherent page walk

In the Linux kernel, the following vulnerability has been resolved:

iommu/vt-d: Disallow dirty tracking if incoherent page walk

Dirty page tracking relies on the IOMMU atomically updating the dirty bit

in the paging-structure entry. For this operation to succeed, the paging-

structure memory must be coherent between the IOMMU and the CPU. In

another word, if the iommu page walk is incoherent, dirty page tracking

doesn't work.

The Intel VT-d specification, Section 3.10 "Snoop Behavior" states:

"Remapping hardware encountering the need to atomically update A/EA/D bits

in a paging-structure entry that is not snooped will result in a non-

recoverable fault."

To prevent an IOMMU from being incorrectly configured for dirty page

tracking when it is operating in an incoherent mode, mark SSADS as

supported only when both ecap_slads and ecap_smpwc are supported.

Affected products

Linux

Linux

< ebe16d245a00626bb87163862a1b07daf5475a3e - AFFECTED

< 8d096ce0e87bdc361f0b25d7943543bc53aa0b9e - AFFECTED

< 57f55048e564dedd8a4546d018e29d6bbfff0a7e - AFFECTED

Linux

6.7 - AFFECTED

< 6.7 - UNAFFECTED

<= 6.12.* - UNAFFECTED

<= 6.17.* - UNAFFECTED

<= * - UNAFFECTED

References

GitHub Security Advisories

GHSA-hwfw-95mf-c924

In the Linux kernel, the following vulnerability has been resolved: iommu/vt-d: Disallow dirty...

https://github.com/advisories/GHSA-hwfw-95mf-c924

In the Linux kernel, the following vulnerability has been resolved:

iommu/vt-d: Disallow dirty tracking if incoherent page walk

Dirty page tracking relies on the IOMMU atomically updating the dirty bit in the paging-structure entry. For this operation to succeed, the paging- structure memory must be coherent between the IOMMU and the CPU. In another word, if the iommu page walk is incoherent, dirty page tracking doesn't work.

The Intel VT-d specification, Section 3.10 "Snoop Behavior" states:

"Remapping hardware encountering the need to atomically update A/EA/D bits in a paging-structure entry that is not snooped will result in a non- recoverable fault."

To prevent an IOMMU from being incorrectly configured for dirty page tracking when it is operating in an incoherent mode, mark SSADS as supported only when both ecap_slads and ecap_smpwc are supported.

JSON source

Click to expand
{
  "dataType": "CVE_RECORD",
  "dataVersion": "5.1",
  "cveMetadata": {
    "cveId": "CVE-2025-40058",
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "dateUpdated": "2025-10-28T11:48:31.567Z",
    "dateReserved": "2025-04-16T07:20:57.158Z",
    "datePublished": "2025-10-28T11:48:31.567Z",
    "state": "PUBLISHED"
  },
  "containers": {
    "cna": {
      "providerMetadata": {
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux",
        "dateUpdated": "2025-10-28T11:48:31.567Z"
      },
      "title": "iommu/vt-d: Disallow dirty tracking if incoherent page walk",
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\niommu/vt-d: Disallow dirty tracking if incoherent page walk\n\nDirty page tracking relies on the IOMMU atomically updating the dirty bit\nin the paging-structure entry. For this operation to succeed, the paging-\nstructure memory must be coherent between the IOMMU and the CPU. In\nanother word, if the iommu page walk is incoherent, dirty page tracking\ndoesn't work.\n\nThe Intel VT-d specification, Section 3.10 \"Snoop Behavior\" states:\n\n\"Remapping hardware encountering the need to atomically update A/EA/D bits\n in a paging-structure entry that is not snooped will result in a non-\n recoverable fault.\"\n\nTo prevent an IOMMU from being incorrectly configured for dirty page\ntracking when it is operating in an incoherent mode, mark SSADS as\nsupported only when both ecap_slads and ecap_smpwc are supported."
        }
      ],
      "affected": [
        {
          "vendor": "Linux",
          "product": "Linux",
          "programFiles": [
            "drivers/iommu/intel/iommu.h"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "defaultStatus": "unaffected",
          "versions": [
            {
              "version": "f35f22cc760eb2c7034bf53251399685d611e03f",
              "status": "affected",
              "versionType": "git",
              "lessThan": "ebe16d245a00626bb87163862a1b07daf5475a3e"
            },
            {
              "version": "f35f22cc760eb2c7034bf53251399685d611e03f",
              "status": "affected",
              "versionType": "git",
              "lessThan": "8d096ce0e87bdc361f0b25d7943543bc53aa0b9e"
            },
            {
              "version": "f35f22cc760eb2c7034bf53251399685d611e03f",
              "status": "affected",
              "versionType": "git",
              "lessThan": "57f55048e564dedd8a4546d018e29d6bbfff0a7e"
            }
          ]
        },
        {
          "vendor": "Linux",
          "product": "Linux",
          "programFiles": [
            "drivers/iommu/intel/iommu.h"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "defaultStatus": "affected",
          "versions": [
            {
              "version": "6.7",
              "status": "affected"
            },
            {
              "version": "0",
              "status": "unaffected",
              "versionType": "semver",
              "lessThan": "6.7"
            },
            {
              "version": "6.12.53",
              "status": "unaffected",
              "versionType": "semver",
              "lessThanOrEqual": "6.12.*"
            },
            {
              "version": "6.17.3",
              "status": "unaffected",
              "versionType": "semver",
              "lessThanOrEqual": "6.17.*"
            },
            {
              "version": "6.18-rc1",
              "status": "unaffected",
              "versionType": "original_commit_for_fix",
              "lessThanOrEqual": "*"
            }
          ]
        }
      ],
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/ebe16d245a00626bb87163862a1b07daf5475a3e"
        },
        {
          "url": "https://git.kernel.org/stable/c/8d096ce0e87bdc361f0b25d7943543bc53aa0b9e"
        },
        {
          "url": "https://git.kernel.org/stable/c/57f55048e564dedd8a4546d018e29d6bbfff0a7e"
        }
      ]
    }
  }
}

Mitre source

https://cveawg.mitre.org/api/cve/CVE-2025-40058