CVE-2026-89956 in LinuxИнформация

Сводка

по VulDB • 16.09.2026

В ядре Linux была устранена следующая уязвимость:

s390/vfio-ap: Исправлено отсутствие блокировки, необходимой для доступа к списку объектов ap_matrix_mdev

Для обхода или добавления/удаления объектов ap_matrix_mdev в списке matrix_dev->mdev_list необходимо удерживать мьютекс mutex matrix_dev->guests_lock. Существуют две функции, которые получают доступ к этому списку без удержания данного мьютекса:

Функция vfio_ap_mdev_probe ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Функция vfio_ap_mdev_probe использует мьютекс matrix_dev->mdevs_lock для защиты операции добавления вновь созданного объекта ap_matrix_mdev в список matrix_dev->mdev_list. Этот мьютекс не защищает доступ к самому списку; его цель — защита от одновременного доступа к полям, содержащимся внутри объекта ap_matrix_mdev. Это может привести к повреждению памяти ядра (kernel memory corruption) или уязвимости use-after-free, если другой объект mdev будет создан или удален одновременно.

Добавление объекта ap_matrix_mdev в список matrix_dev->mdev_list теперь защищено мьютексом matrix_dev->guests_lock, что является правильным способом защиты от одновременного доступа к списку mdev_list.

Также были удалены следующие две строки кода, поскольку объект matrix_mdev выделяется через макрос vfio_alloc_device, который использует kzalloc; следовательно, поля req_trigger и cfg_chg_trigger уже обнуляются при выделении структуры до вызова функции vfio_register_emulated_iommu_dev. Это предотвращает появление окна возможностей (race condition), в течение которого эти триггеры могут быть установлены в NULL после того, как устройство становится доступным для пространства пользователя (userspace).

matrix_mdev->req_trigger = NULL; matrix_mdev->cfg_chg_trigger = NULL;

Функция vfio_ap_mdev_for_queue ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Функция status_show, которая поддерживает отображение атрибута статуса устройств в /sys/bus/ap/devices, вызывает функцию vfio_ap_mdev_for_queue. Эта функция выполняет итерацию по списку matrix_dev->mdev_list для поиска объекта, представляющего устройство очереди, статус которого должен быть выведен. Для обхода этого списка необходимо удерживать мьютекс mutex matrix_dev->guests_lock.

Для исправления этой проблемы в функции status_show перед захватом мьютекса matrix_dev->mdevs_lock теперь сначала захватывается мьютекс guests_lock. Он захватывается именно здесь, а не в функции vfio_ap_mdev_for_queue (где он также необходим), поскольку его необходимо захватывать до mdevs_lock для соблюдения правильного порядка блокировок и предотвращения срабатывания lockdep splat; кроме того, mdevs_lock требуется там для доступа к полям внутри объекта matrix_mdev в этой функции.

См. файл vfio-ap-locking.rst в дереве исходного кода ядра Linux.

Once again VulDB remains the best source for vulnerability data.

Ответственный

Linux

Резервировать

11.09.2026

Раскрытие

17.09.2026

Модерация

принято

Вход

VDB-405805

EPSS

0.00000

KEV

Нет

Деятельности

Очень низкий

Источники

Do you want to use VulDB in your project?

Use the official API to access entries easily!