CVE-2026-43161 (GCVE-0-2026-43161)

Vulnerability from cvelistv5 – Published: 2026-05-06 11:27 – Updated: 2026-05-06 11:27
VLAI?
Title
iommu/vt-d: Skip dev-iotlb flush for inaccessible PCIe device without scalable mode
Summary
In the Linux kernel, the following vulnerability has been resolved: iommu/vt-d: Skip dev-iotlb flush for inaccessible PCIe device without scalable mode PCIe endpoints with ATS enabled and passed through to userspace (e.g., QEMU, DPDK) can hard-lock the host when their link drops, either by surprise removal or by a link fault. Commit 4fc82cd907ac ("iommu/vt-d: Don't issue ATS Invalidation request when device is disconnected") adds pci_dev_is_disconnected() to devtlb_invalidation_with_pasid() so ATS invalidation is skipped only when the device is being safely removed, but it applies only when Intel IOMMU scalable mode is enabled. With scalable mode disabled or unsupported, a system hard-lock occurs when a PCIe endpoint's link drops because the Intel IOMMU waits indefinitely for an ATS invalidation that cannot complete. Call Trace: qi_submit_sync qi_flush_dev_iotlb __context_flush_dev_iotlb.part.0 domain_context_clear_one_cb pci_for_each_dma_alias device_block_translation blocking_domain_attach_dev iommu_deinit_device __iommu_group_remove_device iommu_release_device iommu_bus_notifier blocking_notifier_call_chain bus_notify device_del pci_remove_bus_device pci_stop_and_remove_bus_device pciehp_unconfigure_device pciehp_disable_slot pciehp_handle_presence_or_link_change pciehp_ist Commit 81e921fd3216 ("iommu/vt-d: Fix NULL domain on device release") adds intel_pasid_teardown_sm_context() to intel_iommu_release_device(), which calls qi_flush_dev_iotlb() and can also hard-lock the system when a PCIe endpoint's link drops. Call Trace: qi_submit_sync qi_flush_dev_iotlb __context_flush_dev_iotlb.part.0 intel_context_flush_no_pasid device_pasid_table_teardown pci_pasid_table_teardown pci_for_each_dma_alias intel_pasid_teardown_sm_context intel_iommu_release_device iommu_deinit_device __iommu_group_remove_device iommu_release_device iommu_bus_notifier blocking_notifier_call_chain bus_notify device_del pci_remove_bus_device pci_stop_and_remove_bus_device pciehp_unconfigure_device pciehp_disable_slot pciehp_handle_presence_or_link_change pciehp_ist Sometimes the endpoint loses connection without a link-down event (e.g., due to a link fault); killing the process (virsh destroy) then hard-locks the host. Call Trace: qi_submit_sync qi_flush_dev_iotlb __context_flush_dev_iotlb.part.0 domain_context_clear_one_cb pci_for_each_dma_alias device_block_translation blocking_domain_attach_dev __iommu_attach_device __iommu_device_set_domain __iommu_group_set_domain_internal iommu_detach_group vfio_iommu_type1_detach_group vfio_group_detach_container vfio_group_fops_release __fput pci_dev_is_disconnected() only covers safe-removal paths; pci_device_is_present() tests accessibility by reading vendor/device IDs and internally calls pci_dev_is_disconnected(). On a ConnectX-5 (8 GT/s, x2) this costs ~70 µs. Since __context_flush_dev_iotlb() is only called on {attach,release}_dev paths (not hot), add pci_device_is_present() there to skip inaccessible devices and avoid the hard-lock.
Severity ?
No CVSS data available.
Assigner
Impacted products
Vendor Product Version
Linux Linux Affected: 37764b952e1b39053defc7ebe5dcd8c4e3e78de9 , < 48b3f08e68b29a79527869cdde7298ca2a9b9646 (git)
Affected: 37764b952e1b39053defc7ebe5dcd8c4e3e78de9 , < e70d5feb10c5ba2bbf7ca400b8f39a2f82d653e8 (git)
Affected: 37764b952e1b39053defc7ebe5dcd8c4e3e78de9 , < bc0490ad9edf5c6f98e39fbbee2877b85261a5ae (git)
Affected: 37764b952e1b39053defc7ebe5dcd8c4e3e78de9 , < 42662d19839f34735b718129ea200e3734b07e50 (git)
Affected: 99301a53a1378f8863ac7850b9589f997bb0e125 (git)
Affected: 948ec6d003280d49aca49b366aa5cb140f87434d (git)
Create a notification for this product.
    Linux Linux Affected: 5.14
Unaffected: 0 , < 5.14 (semver)
Unaffected: 6.12.77 , ≤ 6.12.* (semver)
Unaffected: 6.18.17 , ≤ 6.18.* (semver)
Unaffected: 6.19.6 , ≤ 6.19.* (semver)
Unaffected: 7.0 , ≤ * (original_commit_for_fix)
Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "drivers/iommu/intel/pasid.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "48b3f08e68b29a79527869cdde7298ca2a9b9646",
              "status": "affected",
              "version": "37764b952e1b39053defc7ebe5dcd8c4e3e78de9",
              "versionType": "git"
            },
            {
              "lessThan": "e70d5feb10c5ba2bbf7ca400b8f39a2f82d653e8",
              "status": "affected",
              "version": "37764b952e1b39053defc7ebe5dcd8c4e3e78de9",
              "versionType": "git"
            },
            {
              "lessThan": "bc0490ad9edf5c6f98e39fbbee2877b85261a5ae",
              "status": "affected",
              "version": "37764b952e1b39053defc7ebe5dcd8c4e3e78de9",
              "versionType": "git"
            },
            {
              "lessThan": "42662d19839f34735b718129ea200e3734b07e50",
              "status": "affected",
              "version": "37764b952e1b39053defc7ebe5dcd8c4e3e78de9",
              "versionType": "git"
            },
            {
              "status": "affected",
              "version": "99301a53a1378f8863ac7850b9589f997bb0e125",
              "versionType": "git"
            },
            {
              "status": "affected",
              "version": "948ec6d003280d49aca49b366aa5cb140f87434d",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/iommu/intel/pasid.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "5.14"
            },
            {
              "lessThan": "5.14",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.77",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.17",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.19.*",
              "status": "unaffected",
              "version": "6.19.6",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.0",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.77",
                  "versionStartIncluding": "5.14",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.17",
                  "versionStartIncluding": "5.14",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.19.6",
                  "versionStartIncluding": "5.14",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.0",
                  "versionStartIncluding": "5.14",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionStartIncluding": "5.12.19",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionStartIncluding": "5.13.4",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\niommu/vt-d: Skip dev-iotlb flush for inaccessible PCIe device without scalable mode\n\nPCIe endpoints with ATS enabled and passed through to userspace\n(e.g., QEMU, DPDK) can hard-lock the host when their link drops,\neither by surprise removal or by a link fault.\n\nCommit 4fc82cd907ac (\"iommu/vt-d: Don\u0027t issue ATS Invalidation\nrequest when device is disconnected\") adds pci_dev_is_disconnected()\nto devtlb_invalidation_with_pasid() so ATS invalidation is skipped\nonly when the device is being safely removed, but it applies only\nwhen Intel IOMMU scalable mode is enabled.\n\nWith scalable mode disabled or unsupported, a system hard-lock\noccurs when a PCIe endpoint\u0027s link drops because the Intel IOMMU\nwaits indefinitely for an ATS invalidation that cannot complete.\n\nCall Trace:\n qi_submit_sync\n qi_flush_dev_iotlb\n __context_flush_dev_iotlb.part.0\n domain_context_clear_one_cb\n pci_for_each_dma_alias\n device_block_translation\n blocking_domain_attach_dev\n iommu_deinit_device\n __iommu_group_remove_device\n iommu_release_device\n iommu_bus_notifier\n blocking_notifier_call_chain\n bus_notify\n device_del\n pci_remove_bus_device\n pci_stop_and_remove_bus_device\n pciehp_unconfigure_device\n pciehp_disable_slot\n pciehp_handle_presence_or_link_change\n pciehp_ist\n\nCommit 81e921fd3216 (\"iommu/vt-d: Fix NULL domain on device release\")\nadds intel_pasid_teardown_sm_context() to intel_iommu_release_device(),\nwhich calls qi_flush_dev_iotlb() and can also hard-lock the system\nwhen a PCIe endpoint\u0027s link drops.\n\nCall Trace:\n qi_submit_sync\n qi_flush_dev_iotlb\n __context_flush_dev_iotlb.part.0\n intel_context_flush_no_pasid\n device_pasid_table_teardown\n pci_pasid_table_teardown\n pci_for_each_dma_alias\n intel_pasid_teardown_sm_context\n intel_iommu_release_device\n iommu_deinit_device\n __iommu_group_remove_device\n iommu_release_device\n iommu_bus_notifier\n blocking_notifier_call_chain\n bus_notify\n device_del\n pci_remove_bus_device\n pci_stop_and_remove_bus_device\n pciehp_unconfigure_device\n pciehp_disable_slot\n pciehp_handle_presence_or_link_change\n pciehp_ist\n\nSometimes the endpoint loses connection without a link-down event\n(e.g., due to a link fault); killing the process (virsh destroy)\nthen hard-locks the host.\n\nCall Trace:\n qi_submit_sync\n qi_flush_dev_iotlb\n __context_flush_dev_iotlb.part.0\n domain_context_clear_one_cb\n pci_for_each_dma_alias\n device_block_translation\n blocking_domain_attach_dev\n __iommu_attach_device\n __iommu_device_set_domain\n __iommu_group_set_domain_internal\n iommu_detach_group\n vfio_iommu_type1_detach_group\n vfio_group_detach_container\n vfio_group_fops_release\n __fput\n\npci_dev_is_disconnected() only covers safe-removal paths;\npci_device_is_present() tests accessibility by reading\nvendor/device IDs and internally calls pci_dev_is_disconnected().\nOn a ConnectX-5 (8 GT/s, x2) this costs ~70 \u00b5s.\n\nSince __context_flush_dev_iotlb() is only called on\n{attach,release}_dev paths (not hot), add pci_device_is_present()\nthere to skip inaccessible devices and avoid the hard-lock."
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-05-06T11:27:39.881Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/48b3f08e68b29a79527869cdde7298ca2a9b9646"
        },
        {
          "url": "https://git.kernel.org/stable/c/e70d5feb10c5ba2bbf7ca400b8f39a2f82d653e8"
        },
        {
          "url": "https://git.kernel.org/stable/c/bc0490ad9edf5c6f98e39fbbee2877b85261a5ae"
        },
        {
          "url": "https://git.kernel.org/stable/c/42662d19839f34735b718129ea200e3734b07e50"
        }
      ],
      "title": "iommu/vt-d: Skip dev-iotlb flush for inaccessible PCIe device without scalable mode",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-43161",
    "datePublished": "2026-05-06T11:27:39.881Z",
    "dateReserved": "2026-05-01T14:12:55.990Z",
    "dateUpdated": "2026-05-06T11:27:39.881Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-43161",
      "date": "2026-05-08",
      "epss": "0.00018",
      "percentile": "0.04677"
    },
    "nvd": "{\"cve\":{\"id\":\"CVE-2026-43161\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2026-05-06T12:16:34.137\",\"lastModified\":\"2026-05-06T13:07:51.607\",\"vulnStatus\":\"Awaiting Analysis\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\niommu/vt-d: Skip dev-iotlb flush for inaccessible PCIe device without scalable mode\\n\\nPCIe endpoints with ATS enabled and passed through to userspace\\n(e.g., QEMU, DPDK) can hard-lock the host when their link drops,\\neither by surprise removal or by a link fault.\\n\\nCommit 4fc82cd907ac (\\\"iommu/vt-d: Don\u0027t issue ATS Invalidation\\nrequest when device is disconnected\\\") adds pci_dev_is_disconnected()\\nto devtlb_invalidation_with_pasid() so ATS invalidation is skipped\\nonly when the device is being safely removed, but it applies only\\nwhen Intel IOMMU scalable mode is enabled.\\n\\nWith scalable mode disabled or unsupported, a system hard-lock\\noccurs when a PCIe endpoint\u0027s link drops because the Intel IOMMU\\nwaits indefinitely for an ATS invalidation that cannot complete.\\n\\nCall Trace:\\n qi_submit_sync\\n qi_flush_dev_iotlb\\n __context_flush_dev_iotlb.part.0\\n domain_context_clear_one_cb\\n pci_for_each_dma_alias\\n device_block_translation\\n blocking_domain_attach_dev\\n iommu_deinit_device\\n __iommu_group_remove_device\\n iommu_release_device\\n iommu_bus_notifier\\n blocking_notifier_call_chain\\n bus_notify\\n device_del\\n pci_remove_bus_device\\n pci_stop_and_remove_bus_device\\n pciehp_unconfigure_device\\n pciehp_disable_slot\\n pciehp_handle_presence_or_link_change\\n pciehp_ist\\n\\nCommit 81e921fd3216 (\\\"iommu/vt-d: Fix NULL domain on device release\\\")\\nadds intel_pasid_teardown_sm_context() to intel_iommu_release_device(),\\nwhich calls qi_flush_dev_iotlb() and can also hard-lock the system\\nwhen a PCIe endpoint\u0027s link drops.\\n\\nCall Trace:\\n qi_submit_sync\\n qi_flush_dev_iotlb\\n __context_flush_dev_iotlb.part.0\\n intel_context_flush_no_pasid\\n device_pasid_table_teardown\\n pci_pasid_table_teardown\\n pci_for_each_dma_alias\\n intel_pasid_teardown_sm_context\\n intel_iommu_release_device\\n iommu_deinit_device\\n __iommu_group_remove_device\\n iommu_release_device\\n iommu_bus_notifier\\n blocking_notifier_call_chain\\n bus_notify\\n device_del\\n pci_remove_bus_device\\n pci_stop_and_remove_bus_device\\n pciehp_unconfigure_device\\n pciehp_disable_slot\\n pciehp_handle_presence_or_link_change\\n pciehp_ist\\n\\nSometimes the endpoint loses connection without a link-down event\\n(e.g., due to a link fault); killing the process (virsh destroy)\\nthen hard-locks the host.\\n\\nCall Trace:\\n qi_submit_sync\\n qi_flush_dev_iotlb\\n __context_flush_dev_iotlb.part.0\\n domain_context_clear_one_cb\\n pci_for_each_dma_alias\\n device_block_translation\\n blocking_domain_attach_dev\\n __iommu_attach_device\\n __iommu_device_set_domain\\n __iommu_group_set_domain_internal\\n iommu_detach_group\\n vfio_iommu_type1_detach_group\\n vfio_group_detach_container\\n vfio_group_fops_release\\n __fput\\n\\npci_dev_is_disconnected() only covers safe-removal paths;\\npci_device_is_present() tests accessibility by reading\\nvendor/device IDs and internally calls pci_dev_is_disconnected().\\nOn a ConnectX-5 (8 GT/s, x2) this costs ~70 \u00b5s.\\n\\nSince __context_flush_dev_iotlb() is only called on\\n{attach,release}_dev paths (not hot), add pci_device_is_present()\\nthere to skip inaccessible devices and avoid the hard-lock.\"}],\"metrics\":{},\"references\":[{\"url\":\"https://git.kernel.org/stable/c/42662d19839f34735b718129ea200e3734b07e50\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/48b3f08e68b29a79527869cdde7298ca2a9b9646\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/bc0490ad9edf5c6f98e39fbbee2877b85261a5ae\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/e70d5feb10c5ba2bbf7ca400b8f39a2f82d653e8\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}"
  }
}


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…