GCVE Workshop - 22 September 2026 (14:00-18:00), Luxembourg Before The Vulnopticon Conference - Registration

CVE-2026-89445 (GCVE-0-2026-89445)

Vulnerability from cvelistv5 – Published: 2026-09-11 19:43 – Updated: 2026-09-13 06:29
VLAI
Title
iommufd: Fix UAF in selftest IOPF reporting
Summary
In the Linux kernel, the following vulnerability has been resolved: iommufd: Fix UAF in selftest IOPF reporting IOMMUFD selftest TRIGGER_IOPF borrows an attach handle from group->pasid_array without synchronizing against PASID detach, then a concurrent iommu_report_device_fault() can dereference that borrowed handle's domain pointer after the detach erases the handle and frees the backing struct iommufd_attach_handle. TRIGGER_IOPF then dereferences the freed handle, causing a UAF. Fix by adding a iopf_rwsem in mock_dev to follow the expected design of a real driver. Hold its read side across the whole iommu_report_device_fault() call, and its write side around every path that attaches, detaches, or replaces a device domain. This can block new reports and drains in-flight reports before an old attach handle or the IOPF fault parameter can be removed. Also take the write side while registering a mock device, since it can invoke the mock driver's default-domain attach callback.
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: ddee19971081b42615d62f4fdada21274708ed4d , < cab2895729516799384d48560e6fca105fb3f927 (git)
Affected: ddee19971081b42615d62f4fdada21274708ed4d , < e27e90bde68b2ab92e63ed19caad1ef57188bea0 (git)
Affected: ddee19971081b42615d62f4fdada21274708ed4d , < 8c07df7cdfcf52f1ff276c588612aabc6c6b8399 (git)
guessed Create a notification for this product.
Linux Linux Affected: 6.11
Unaffected: 0 , < 6.11 (semver)
Unaffected: 6.18.50 , ≤ 6.18.* (semver)
Unaffected: 7.2.4 , ≤ 7.2.* (semver)
Unaffected: 7.3-rc1 , ≤ * (original_commit_for_fix)
guessed Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "drivers/iommu/iommufd/selftest.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "cab2895729516799384d48560e6fca105fb3f927",
              "status": "affected",
              "version": "ddee19971081b42615d62f4fdada21274708ed4d",
              "versionType": "git"
            },
            {
              "lessThan": "e27e90bde68b2ab92e63ed19caad1ef57188bea0",
              "status": "affected",
              "version": "ddee19971081b42615d62f4fdada21274708ed4d",
              "versionType": "git"
            },
            {
              "lessThan": "8c07df7cdfcf52f1ff276c588612aabc6c6b8399",
              "status": "affected",
              "version": "ddee19971081b42615d62f4fdada21274708ed4d",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/iommu/iommufd/selftest.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.18.*",
              "status": "unaffected",
              "version": "6.18.50",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.2.*",
              "status": "unaffected",
              "version": "7.2.4",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.3-rc1",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.50",
                  "versionStartIncluding": "6.11",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.4",
                  "versionStartIncluding": "6.11",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3-rc1",
                  "versionStartIncluding": "6.11",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\niommufd: Fix UAF in selftest IOPF reporting\n\nIOMMUFD selftest TRIGGER_IOPF borrows an attach handle from\ngroup-\u003epasid_array without synchronizing against PASID detach,\nthen a concurrent iommu_report_device_fault() can dereference\nthat borrowed handle\u0027s domain pointer after the detach erases\nthe handle and frees the backing struct iommufd_attach_handle.\nTRIGGER_IOPF then dereferences the freed handle, causing a UAF.\n\nFix by adding a iopf_rwsem in mock_dev to follow the expected design\nof a real driver. Hold its read side across the whole\niommu_report_device_fault() call, and its write side around every\npath that attaches, detaches, or replaces a device domain.\nThis can block new reports and drains in-flight reports before an old\nattach handle or the IOPF fault parameter can be removed.\nAlso take the write side while registering a mock device, since\nit can invoke the mock driver\u0027s default-domain attach callback."
        }
      ],
      "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 UAF is reached only via local ioctls on /dev/iommu (or VFIO-compat /dev/vfio/vfio): IOMMU_TEST_CMD TRIGGER_IOPF calls iommu_report_device_fault() while a concurrent PASID/RID detach frees the attach handle. No network or packet-receive path exists.\nAC:L - The attacker controls both sides of the race by issuing concurrent IOMMU_TEST_OP_TRIGGER_IOPF and PASID_DETACH/REPLACE or mock-domain destroy on the same fd; iommu_attach_handle_get() does not keep the handle alive after lookup, so no victim timing or uncontrollable layout is required.\nPR:L - iommufd_fops_open() and IOMMU_TEST_CMD perform no capability checks; /dev/iommu is 0660 and MOCK_DOMAIN creates an IOPF-capable mock device without physical assignment, so an unprivileged local user with iommufd access (selftest/syzkaller kernels or VFIO/iommufd group membership) can trigger it without init-namespace root.\nUI:N - Exploitation requires no victim action; the attacker programmatically opens iommufd, creates a mock domain, attaches a PASID, and races TRIGGER_IOPF against detach through their own file descriptors and ioctls.\nS:C - The freed object is struct iommufd_attach_handle used by iommu_report_device_fault() to dispatch domain-\u003eiopf_handler and complete IOMMU page faults; pre-fix TRIGGER_IOPF also accepted any bound idev, so corrupting those handles can hijack IOMMU fault/DMA isolation across the device-assignment boundary.\nC:H - Use-after-free of iommufd_attach_handle lets an attacker reclaim the slab and control the domain pointer later read as attach_handle-\u003edomain-\u003eiopf_handler, enabling arbitrary kernel reads through the IOPF handler and fault-queue path.\nI:H - The UAF is a function-pointer dereference of domain-\u003eiopf_handler plus later handle use in iommufd_fault_iopf_handler; heap spraying yields an arbitrary write and control-flow hijack in the IOMMU fault-completion path.\nA:H - Dereferencing the freed attach handle in find_fault_handler()/iommu_report_device_fault() causes a kernel oops or panic; the UAF is reliably crashable even when not fully exploited for code execution."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-09-13T06:29:27.592Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/cab2895729516799384d48560e6fca105fb3f927"
        },
        {
          "url": "https://git.kernel.org/stable/c/e27e90bde68b2ab92e63ed19caad1ef57188bea0"
        },
        {
          "url": "https://git.kernel.org/stable/c/8c07df7cdfcf52f1ff276c588612aabc6c6b8399"
        }
      ],
      "title": "iommufd: Fix UAF in selftest IOPF reporting",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-89445",
    "datePublished": "2026-09-11T19:43:12.765Z",
    "dateReserved": "2026-09-11T19:38:34.704Z",
    "dateUpdated": "2026-09-13T06:29:27.592Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-89445",
      "date": "2026-09-17",
      "epss": "0.00161",
      "percentile": "0.05756"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "defaultStatus": "unaffected",
                "product": "Linux",
                "programFiles": [
                  "drivers/iommu/iommufd/selftest.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "lessThan": "cab2895729516799384d48560e6fca105fb3f927",
                    "status": "affected",
                    "version": "ddee19971081b42615d62f4fdada21274708ed4d",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "e27e90bde68b2ab92e63ed19caad1ef57188bea0",
                    "status": "affected",
                    "version": "ddee19971081b42615d62f4fdada21274708ed4d",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "8c07df7cdfcf52f1ff276c588612aabc6c6b8399",
                    "status": "affected",
                    "version": "ddee19971081b42615d62f4fdada21274708ed4d",
                    "versionType": "git"
                  }
                ]
              },
              {
                "defaultStatus": "affected",
                "product": "Linux",
                "programFiles": [
                  "drivers/iommu/iommufd/selftest.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.18.*",
                    "status": "unaffected",
                    "version": "6.18.50",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "7.2.*",
                    "status": "unaffected",
                    "version": "7.2.4",
                    "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\niommufd: Fix UAF in selftest IOPF reporting\n\nIOMMUFD selftest TRIGGER_IOPF borrows an attach handle from\ngroup-\u003epasid_array without synchronizing against PASID detach,\nthen a concurrent iommu_report_device_fault() can dereference\nthat borrowed handle\u0027s domain pointer after the detach erases\nthe handle and frees the backing struct iommufd_attach_handle.\nTRIGGER_IOPF then dereferences the freed handle, causing a UAF.\n\nFix by adding a iopf_rwsem in mock_dev to follow the expected design\nof a real driver. Hold its read side across the whole\niommu_report_device_fault() call, and its write side around every\npath that attaches, detaches, or replaces a device domain.\nThis can block new reports and drains in-flight reports before an old\nattach handle or the IOPF fault parameter can be removed.\nAlso take the write side while registering a mock device, since\nit can invoke the mock driver\u0027s default-domain attach callback."
          }
        ],
        "id": "CVE-2026-89445",
        "lastModified": "2026-09-13T07:17:09.093",
        "metrics": {
          "cvssMetricV31": [
            {
              "cvssData": {
                "attackComplexity": "LOW",
                "attackVector": "LOCAL",
                "availabilityImpact": "HIGH",
                "baseScore": 8.8,
                "baseSeverity": "HIGH",
                "confidentialityImpact": "HIGH",
                "integrityImpact": "HIGH",
                "privilegesRequired": "LOW",
                "scope": "CHANGED",
                "userInteraction": "NONE",
                "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H",
                "version": "3.1"
              },
              "exploitabilityScore": 2.0,
              "impactScore": 6.0,
              "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
              "type": "Secondary"
            }
          ]
        },
        "published": "2026-09-11T20:19:24.990",
        "references": [
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/8c07df7cdfcf52f1ff276c588612aabc6c6b8399"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/cab2895729516799384d48560e6fca105fb3f927"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/e27e90bde68b2ab92e63ed19caad1ef57188bea0"
          }
        ],
        "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "vulnStatus": "Received"
      }
    },
    "redhat_vex": {
      "aggregate_severity": "Moderate",
      "current_release_date": "2026-09-17T18:52:01+00:00",
      "cve": "CVE-2026-89445",
      "id": "CVE-2026-89445",
      "initial_release_date": "2026-09-11T00:00:00+00:00",
      "product_status:known_affected": "2",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "kernel: iommufd: Fix UAF in selftest IOPF reporting",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-89445.json",
      "version": "3"
    },
    "suse_vex": {
      "aggregate_severity": "moderate",
      "current_release_date": "2026-09-15T00:59:16Z",
      "cve": "CVE-2026-89445",
      "id": "CVE-2026-89445",
      "initial_release_date": "2026-09-12T16:28:21Z",
      "product_status:known_affected": "17",
      "product_status:known_not_affected": "336",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2026-89445",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/cve-2026-89445.json",
      "version": "4"
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

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…

Detection rules are retrieved from Rulezet.

Loading…

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…