{
    "dataType": "CVE_RECORD",
    "dataVersion": "5.2",
    "cveMetadata": {
        "cveId": "CVE-2024-26620",
        "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "state": "PUBLISHED",
        "assignerShortName": "Linux",
        "dateReserved": "2024-02-19T14:20:24.132Z",
        "datePublished": "2024-02-29T15:52:21.743Z",
        "dateUpdated": "2026-08-05T11:26:18.311Z"
    },
    "containers": {
        "cna": {
            "providerMetadata": {
                "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
                "shortName": "Linux",
                "dateUpdated": "2026-08-05T11:26:18.311Z"
            },
            "descriptions": [
                {
                    "lang": "en",
                    "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ns390/vfio-ap: always filter entire AP matrix\n\nThe vfio_ap_mdev_filter_matrix function is called whenever a new adapter or\ndomain is assigned to the mdev. The purpose of the function is to update\nthe guest's AP configuration by filtering the matrix of adapters and\ndomains assigned to the mdev. When an adapter or domain is assigned, only\nthe APQNs associated with the APID of the new adapter or APQI of the new\ndomain are inspected. If an APQN does not reference a queue device bound to\nthe vfio_ap device driver, then it's APID will be filtered from the mdev's\nmatrix when updating the guest's AP configuration.\n\nInspecting only the APID of the new adapter or APQI of the new domain will\nresult in passing AP queues through to a guest that are not bound to the\nvfio_ap device driver under certain circumstances. Consider the following:\n\nguest's AP configuration (all also assigned to the mdev's matrix):\n14.0004\n14.0005\n14.0006\n16.0004\n16.0005\n16.0006\n\nunassign domain 4\nunbind queue 16.0005\nassign domain 4\n\nWhen domain 4 is re-assigned, since only domain 4 will be inspected, the\nAPQNs that will be examined will be:\n14.0004\n16.0004\n\nSince both of those APQNs reference queue devices that are bound to the\nvfio_ap device driver, nothing will get filtered from the mdev's matrix\nwhen updating the guest's AP configuration. Consequently, queue 16.0005\nwill get passed through despite not being bound to the driver. This\nviolates the linux device model requirement that a guest shall only be\ngiven access to devices bound to the device driver facilitating their\npass-through.\n\nTo resolve this problem, every adapter and domain assigned to the mdev will\nbe inspected when filtering the mdev's matrix."
                }
            ],
            "metrics": [
                {
                    "cvssV3_1": {
                        "version": "3.1",
                        "vectorString": "CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H",
                        "baseScore": 8.2,
                        "baseSeverity": "HIGH"
                    },
                    "scenarios": [
                        {
                            "lang": "en",
                            "value": "AV:L - The vulnerability is triggered through local host interfaces — writes to the mdev's `assign_adapter`/`assign_domain` sysfs attributes and AP queue driver bind/unbind on the s390 host, or a host AP configuration change handled by `vfio_ap_mdev_hot_plug_cfg()`. There is no network-reachable path into `vfio_ap_mdev_filter_matrix()`.\nAC:L - The condition is fully deterministic and reproducible — the documented unassign-domain / unbind-queue / reassign-domain sequence reliably restores an unbound APQN into the guest's shadow APCB every time, with no race, timing window, or memory-layout dependency.\nPR:H - Both `assign_adapter_store` and `assign_domain_store` are `DEVICE_ATTR_WO` (mode 0200) on the vfio_ap matrix mdev, and unbinding a queue from the driver requires writing `/sys/bus/ap/drivers/vfio_ap/unbind`; these are real-root host administrative operations that cannot be obtained through user namespaces.\nUI:N - Once the assignment sequence is performed, `vfio_ap_mdev_update_guest_apcb()` immediately pushes the over-permissive APCB to the running guest via `kvm_arch_crypto_set_masks()`. No separate victim action is needed for the unauthorized queue to become live.\nS:C - The bug in the host's vfio-ap passthrough logic grants a KVM guest direct millicode-enforced hardware access to an AP queue outside the resources delegated to it — crossing the VM/device-passthrough isolation boundary into the host's (or another consumer's) security authority, analogous to an IOMMU/DMA boundary bypass.\nC:H - NQAP/DQAP are not host-intercepted, so the guest can dequeue replies from a queue still owned by the host zcrypt stack, exposing host cryptographic request/response data and key material; the sibling fix in the same series explicitly cites preventing \"leaking crypto data\" to a different guest or device driver.\nI:H - The guest can enqueue arbitrary AP requests and issue queue-state-changing commands to a physical adapter/domain that the host believes it exclusively controls, corrupting host crypto operations and altering hardware queue state outside the guest's authorized configuration.\nA:H - The guest can issue PQAP(ZAPQ) resets or flood the shared queue, disrupting host crypto services that depend on it (pkey, secure-key LUKS, openCryptoki); because the queue is not bound to vfio_ap it also escapes the driver's reset/cleanup accounting, leaving the hardware in an inconsistent state."
                        }
                    ]
                }
            ],
            "affected": [
                {
                    "product": "Linux",
                    "vendor": "Linux",
                    "defaultStatus": "unaffected",
                    "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                    "programFiles": [
                        "drivers/s390/crypto/vfio_ap_ops.c"
                    ],
                    "versions": [
                        {
                            "version": "48cae940c31d2407d860d87c41d5f9871c0521db",
                            "lessThan": "d6b8d034b576f406af920a7bee81606c027b24c6",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "48cae940c31d2407d860d87c41d5f9871c0521db",
                            "lessThan": "c69d821197611678533fb3eb784fc823b921349a",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "48cae940c31d2407d860d87c41d5f9871c0521db",
                            "lessThan": "cdd134d56138302976685e6c7bc4755450b3880e",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "48cae940c31d2407d860d87c41d5f9871c0521db",
                            "lessThan": "850fb7fa8c684a4c6bf0e4b6978f4ddcc5d43d11",
                            "status": "affected",
                            "versionType": "git"
                        }
                    ]
                },
                {
                    "product": "Linux",
                    "vendor": "Linux",
                    "defaultStatus": "affected",
                    "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                    "programFiles": [
                        "drivers/s390/crypto/vfio_ap_ops.c"
                    ],
                    "versions": [
                        {
                            "version": "6.0",
                            "status": "affected"
                        },
                        {
                            "version": "0",
                            "lessThan": "6.0",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "6.1.76",
                            "lessThanOrEqual": "6.1.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "6.6.15",
                            "lessThanOrEqual": "6.6.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "6.7.3",
                            "lessThanOrEqual": "6.7.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "6.8",
                            "lessThanOrEqual": "*",
                            "status": "unaffected",
                            "versionType": "original_commit_for_fix"
                        }
                    ]
                }
            ],
            "cpeApplicability": [
                {
                    "nodes": [
                        {
                            "operator": "OR",
                            "negate": false,
                            "cpeMatch": [
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "6.0",
                                    "versionEndExcluding": "6.1.76"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "6.0",
                                    "versionEndExcluding": "6.6.15"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "6.0",
                                    "versionEndExcluding": "6.7.3"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "6.0",
                                    "versionEndExcluding": "6.8"
                                }
                            ]
                        }
                    ]
                }
            ],
            "references": [
                {
                    "url": "https://git.kernel.org/stable/c/d6b8d034b576f406af920a7bee81606c027b24c6"
                },
                {
                    "url": "https://git.kernel.org/stable/c/c69d821197611678533fb3eb784fc823b921349a"
                },
                {
                    "url": "https://git.kernel.org/stable/c/cdd134d56138302976685e6c7bc4755450b3880e"
                },
                {
                    "url": "https://git.kernel.org/stable/c/850fb7fa8c684a4c6bf0e4b6978f4ddcc5d43d11"
                }
            ],
            "title": "s390/vfio-ap: always filter entire AP matrix",
            "x_generator": {
                "engine": "bippy-1.2.0"
            }
        },
        "adp": [
            {
                "metrics": [
                    {
                        "other": {
                            "type": "ssvc",
                            "content": {
                                "timestamp": "2024-06-21T16:17:50.706857Z",
                                "id": "CVE-2024-26620",
                                "options": [
                                    {
                                        "Exploitation": "none"
                                    },
                                    {
                                        "Automatable": "no"
                                    },
                                    {
                                        "Technical Impact": "partial"
                                    }
                                ],
                                "role": "CISA Coordinator",
                                "version": "2.0.3"
                            }
                        }
                    }
                ],
                "title": "CISA ADP Vulnrichment",
                "providerMetadata": {
                    "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
                    "shortName": "CISA-ADP",
                    "dateUpdated": "2024-06-21T16:18:01.425Z"
                }
            },
            {
                "providerMetadata": {
                    "orgId": "af854a3a-2127-422b-91ae-364da2661108",
                    "shortName": "CVE",
                    "dateUpdated": "2024-08-02T00:07:19.626Z"
                },
                "title": "CVE Program Container",
                "references": [
                    {
                        "url": "https://git.kernel.org/stable/c/d6b8d034b576f406af920a7bee81606c027b24c6",
                        "tags": [
                            "x_transferred"
                        ]
                    },
                    {
                        "url": "https://git.kernel.org/stable/c/c69d821197611678533fb3eb784fc823b921349a",
                        "tags": [
                            "x_transferred"
                        ]
                    },
                    {
                        "url": "https://git.kernel.org/stable/c/cdd134d56138302976685e6c7bc4755450b3880e",
                        "tags": [
                            "x_transferred"
                        ]
                    },
                    {
                        "url": "https://git.kernel.org/stable/c/850fb7fa8c684a4c6bf0e4b6978f4ddcc5d43d11",
                        "tags": [
                            "x_transferred"
                        ]
                    }
                ]
            }
        ]
    }
}