CVE-2026-89958 in Linux信息

摘要

由 VulDB • 2026-09-16

在 Linux 内核中,已修复以下漏洞:

s390/vfio-ap: 在未检查 `matrix_mdev->kvm` 是否为空的情况下修复对 `matrix_mdev->kvm` 的解引用问题。

`ap_driver` 结构体包含两个指向回调函数的函数指针字段:

* `.on_config_changed`: 在 AP 总线扫描功能开始时调用,用于通知设备驱动程序主机 AP 配置已更改,并且相关的 AP 设备将相应地添加或移除。这使实现者有机会在相关设备被添加或移除之前评估并响应这些配置变更。

* `.on_scan_complete`: 在 AP 总线扫描功能结束时调用,用于通知设备驱动程序主机 AP 配置已更改,且 AP 设备已相应地被添加或移除。这使实现者在相关设备被添加或移除后有机会响应这些变更。

这两个回调函数分别在 vfio_ap 设备驱动程序中通过 `vfio_ap_on_cfg_changed` 和 `vfio_ap_on_scan_complete` 函数实现。

在这两个回调函数的调用栈中,获取了 `matrix_mdev->kvm->lock` 互斥锁,但未检查 `matrix_mdev->kvm` 是否为 NULL。如果从未设置过 `matrix_mdev->kvm`,尝试获取该锁将触发空指针解引用(NULL pointer dereference)。此补丁在获取 `matrix_mdev->kvm->lock` 互斥锁之前增加了对 `matrix_mdev->kvm == NULL` 的检查。

请注意,在 `vfio_ap_mdev_hot_plug_config` 函数中获取的 `matrix_mdev->kvm->lock` 互斥锁已移至调用该函数的位置,同时移动的还包括用于访问 `matrix_mdev` 字段所需的 `matrix_dev->mdevs_lock`。如果在获取 kvm->lock 互斥锁之前在此处进行对 matrix_mdev->kvm 的检查,随后又需要通过另一个补丁将其移出,这样做意义不大,因此在本补丁中一并完成该更改。

以下事项非常重要: 1. `matrix_dev->guests_lock` 在两个回调函数的开始处获取。这确保了 `matrix_mdev` 不会通过 `vfio_ap_mdev_remove` 函数被移除,因为后者在移除对象之前也会获取 `matrix_dev_guests_lock`;因此,在整个回调函数执行期间,`matrix_mdev` 将保持可用状态。

2. 必须获取 `matrix_dev->mdevs_lock` 互斥锁才能访问 `matrix_mdev` 结构体中的字段。

3. 必须在 `matrix_dev->mdevs_lock` 之前获取 `matrix_mdev->kvm->lock` 互斥锁,以防止出现 lockdep splat(死锁检测警告)。

4. 在通过 `vfio_ap_mdev_update_guest_apcb` 函数将客户的 AP 配置插入其 SIE 状态描述时,必须持有 kvm->lock。

5. `vfio_ap_mdev_update_guest_apcb` 会在执行客户 AP 配置的动态热插拔之前检查 `matrix_mdev->kvm`,以验证其不为 NULL。

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

来源

Interested in the pricing of exploits?

See the underground prices here!