CVE-2026-89959 (GCVE-0-2026-89959)
Vulnerability from cvelistv5
Published
2026-09-16 10:32
Modified
2026-10-19 08:55
Summary
In the Linux kernel, the following vulnerability has been resolved: s390/vfio-ap: Fix control domain removal in vfio_ap_mdev_cfg_remove The vfio_ap_config_remove function uses the bitmap_andnot function to clear bits from the matrix_mdev->matrix.adm bitmap (specifies the control domains assigned to the mdev). This prevents the explicitly unplugged control domains from being removed the KVM guest. The bitmap_and function is used instead.
Impacted products
Vendor Product Version
Linux Linux Version: eeb386aeb5b7c8d2dae6a3ba49255d8a97803182
Version: eeb386aeb5b7c8d2dae6a3ba49255d8a97803182
Version: eeb386aeb5b7c8d2dae6a3ba49255d8a97803182
Version: eeb386aeb5b7c8d2dae6a3ba49255d8a97803182
Version: eeb386aeb5b7c8d2dae6a3ba49255d8a97803182
Version: eeb386aeb5b7c8d2dae6a3ba49255d8a97803182
Create a notification for this product.
Show details on NVD website


{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "drivers/s390/crypto/vfio_ap_ops.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "12871a4269f139221c9fde9ea3eb69c9228f59d4",
              "status": "affected",
              "version": "eeb386aeb5b7c8d2dae6a3ba49255d8a97803182",
              "versionType": "git"
            },
            {
              "lessThan": "02e72909453dee2f8a09f78819f9a9cb902dfbdc",
              "status": "affected",
              "version": "eeb386aeb5b7c8d2dae6a3ba49255d8a97803182",
              "versionType": "git"
            },
            {
              "lessThan": "4bffadde7fc49b00493fb78c6376f958998d4b8c",
              "status": "affected",
              "version": "eeb386aeb5b7c8d2dae6a3ba49255d8a97803182",
              "versionType": "git"
            },
            {
              "lessThan": "f7d66afc34bc6e833c8ebe56973afec35f473bc1",
              "status": "affected",
              "version": "eeb386aeb5b7c8d2dae6a3ba49255d8a97803182",
              "versionType": "git"
            },
            {
              "lessThan": "2ff68bf414de167bc138e6e211ee1ad3ab3c5052",
              "status": "affected",
              "version": "eeb386aeb5b7c8d2dae6a3ba49255d8a97803182",
              "versionType": "git"
            },
            {
              "lessThan": "6b8a02e216f6b520cc029e43ddc83956605135d5",
              "status": "affected",
              "version": "eeb386aeb5b7c8d2dae6a3ba49255d8a97803182",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/s390/crypto/vfio_ap_ops.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.0"
            },
            {
              "lessThan": "6.0",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.1.*",
              "status": "unaffected",
              "version": "6.1.188",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.157",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.110",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.51",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.2.*",
              "status": "unaffected",
              "version": "7.2.5",
              "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.1.188",
                  "versionStartIncluding": "6.0",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.157",
                  "versionStartIncluding": "6.0",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.110",
                  "versionStartIncluding": "6.0",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.51",
                  "versionStartIncluding": "6.0",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.5",
                  "versionStartIncluding": "6.0",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3",
                  "versionStartIncluding": "6.0",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ns390/vfio-ap: Fix control domain removal in vfio_ap_mdev_cfg_remove\n\nThe vfio_ap_config_remove function uses the bitmap_andnot function to clear\nbits from the matrix_mdev-\u003ematrix.adm bitmap (specifies the control domains\nassigned to the mdev). This prevents the explicitly unplugged control\ndomains from being removed the KVM guest. The bitmap_and function is used\ninstead."
        }
      ],
      "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 bug is reached when the host AP bus scan (ap_scan_bus \u2192 vfio_ap_on_cfg_changed \u2192 vfio_ap_mdev_cfg_remove) fails to clear control-domain bits from a KVM guest CRYCB; that is a local s390 vfio-ap/KVM path with no network, Bluetooth, or USB exposure.\nAC:L - bitmap_andnot(cdrem, cd_remove, matrix.adm) always yields removed domains that are not assigned to the mdev, so assigned control domains are never unplugged. After QCI drops a domain assigned to the mdev, leftover guest ADM bits persist deterministically with no race or uncontrolled memory layout.\nPR:L - Leftover ADM bits are consumed by the tenant KVM guest (or an unprivileged kvm-group QEMU process holding a delegated vfio-ap mdev) via millicode-enforced AP instructions with no host capability check. Creating the mdev is admin setup; exploiting the failed unplug does not require init-namespace root.\nUI:N - After the host AP configuration change, vfio_ap_mdev_cfg_remove runs from the AP bus workqueue with no further victim action, and the guest itself issues NQAP/PQAP against the stale control domains. No mount, click, or other user interaction is required.\nS:C - Leftover ADM bits in the guest CRYCB grant millicode-enforced rights to modify AP control domains the host intended to revoke, crossing the vfio-ap/KVM passthrough isolation boundary into the host or another consumer\u0027s crypto-domain authority, including nested guests whose shadow APCB is ANDed with the stale L1 mask.\nC:H - Control domains authorize AP commands that operate on other domains\u0027 key material (for example setting a secure private key). Stale ADM bits let the guest keep targeting those domains through remaining usage-domain queues, disclosing or wrapping keys that should belong to host zcrypt or another guest.\nI:H - With leftover control-domain access the guest can still submit AP command-request messages that change master keys and other domain state for domains removed from the host AP configuration, corrupting crypto state the host believes was unplugged and is no longer delegated to that VM.\nA:H - The guest can keep changing or destroying keys on the unplugged control domains and issue AP commands that render those domains unusable for the host or a sibling guest that should have received them after the QCI removal, denying IBM Z crypto services that depend on those domains."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-10-19T08:55:33.075Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/12871a4269f139221c9fde9ea3eb69c9228f59d4"
        },
        {
          "url": "https://git.kernel.org/stable/c/02e72909453dee2f8a09f78819f9a9cb902dfbdc"
        },
        {
          "url": "https://git.kernel.org/stable/c/4bffadde7fc49b00493fb78c6376f958998d4b8c"
        },
        {
          "url": "https://git.kernel.org/stable/c/f7d66afc34bc6e833c8ebe56973afec35f473bc1"
        },
        {
          "url": "https://git.kernel.org/stable/c/2ff68bf414de167bc138e6e211ee1ad3ab3c5052"
        },
        {
          "url": "https://git.kernel.org/stable/c/6b8a02e216f6b520cc029e43ddc83956605135d5"
        }
      ],
      "title": "s390/vfio-ap: Fix control domain removal in vfio_ap_mdev_cfg_remove",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-89959",
    "datePublished": "2026-09-16T10:32:41.908Z",
    "dateReserved": "2026-09-11T19:38:34.778Z",
    "dateUpdated": "2026-10-19T08:55:33.075Z",
    "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…