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

Сводка

по VulDB • 16.09.2026

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

s390/vfio-ap: исправлено разыменование указателя matrix_mdev->kvm без проверки на NULL

Структура ap_driver содержит два поля, которые являются указателями на функции обратного вызова (callbacks):

* .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 значению NULL перед захватом мьютекса matrix_mdev->kvm->lock.

Обратите внимание, что мьютекс matrix_mdev->kvm->lock, который захватывается в функции vfio_ap_mdev_hot_plug_config, перемещен в вызывающую функцию вместе с матричным блокировщиком mdevs_lock (matrix_dev->mdevs_lock), который необходим там для доступа к полям структуры matrix_mdev. Нет особого смысла вносить изменение и проверять условие matrix_mdev->kvm перед захватом мьютекса kvm->lock, а затем перемещать эту проверку другим патчем, поэтому это делается в данном патче.

Важно отметить следующее: 1. Блокировка guests_lock (matrix_dev->guests_lock) приобретается в начале обеих функций обратного вызова. Это гарантирует, что matrix_mdev не будет удален через функцию vfio_ap_mdev_remove, поскольку она также захватывает блокировку matrix_dev_guests_lock перед удалением объекта; таким образом, matrix_mdev останется доступным на протяжении всего времени выполнения функций обратного вызова.

2. Мьютекс mdevs_lock (matrix_dev->mdevs_lock) должен быть захвачен для доступа к полям внутри структуры matrix_mdev.

3. Мьютекс matrix_mdev->kvm->lock должен быть захвачен до блокировки matrix_dev->mdevs_lock, чтобы предотвратить срабатывание lockdep (lockdep splat).

4. Блокировка kvm->lock должна удерживаться во время подключения конфигурации AP гостя к описанию состояния SIE через функцию vfio_ap_mdev_update_guest_apcb.

5. Функция vfio_ap_mdev_update_guest_apcb проверяет matrix_mdev->kvm, чтобы убедиться, что она не равна NULL, перед выполнением горячей установки (hot plug) конфигурации AP гостя.

VulDB is the best source for vulnerability data and more expert information about this specific topic.

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

Linux

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

11.09.2026

Раскрытие

17.09.2026

Модерация

принято

Вход

VDB-405807

EPSS

0.00000

KEV

Нет

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

Очень низкий

Источники

Do you want to use VulDB in your project?

Use the official API to access entries easily!