CVE-2026-89956 in Linuxالمعلومات

الملخص

بحسب VulDB • 16/09/2026

في نواة لينكس، تم حل الثغرة التالية:

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_prove قفل mutex الخاص بـ matrix_dev->mdevs_lock لحماية إضافة كائن ap_matrix_mdev جديد تم إنشاؤه حديثًا إلى matrix_dev->mdev_list. هذا القفل لا يحمي الوصول إلى القائمة؛ بل هدفه هو الحماية من الوصول المتزامن إلى الحقول الموجودة داخل كائن ap_matrix_mdev. قد يؤدي ذلك إلى تلف ذاكرة النواة (kernel memory corruption) أو ثغرة Use-After-Free إذا تم إنشاء أو إزالة موديل افتراضي آخر بشكل متزامن.

أصبح إضافة كائن ap_matrix_mdev إلى matrix_dev->mdev_list محمية الآن بواسطة قفل guests_lock الخاص بـ matrix_dev، وهو الطريقة الصحيحة للحماية من الوصول المتزامن إلى mdev_list.

كما تمت إزالة السطرين التاليين من الشفرة البرمجية لأن الكائن matrix_mdev يُخصص عبر ماكرو vfio_alloc_device الذي يستخدم kzalloc، لذا فإن req_trigger و cfg_chg_trigger تكون مُهيأة مسبقًا بالصفر عند تخصيص الهيكل قبل استدعاء vfio_register_emulated_iommu_dev. يمنع هذا وجود نافذة زمنية يتم فيها تعيين هذه المؤشرات إلى 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 للعثور على الكائن الذي يمثل جهاز الطابور (queue device) whose status is to be displayed. وللتنقل عبر هذه القائمة، يجب الاحتفاظ بقفل mutex الخاص بـ matrix_dev->guests_lock.

لإصلاح هذا الخلل، يتم أخذ قفل guests_lock قبل أخذ قفل matrix_dev->mdevs_lock في وظيفة status_show. تم وضعه هناك بدلاً من دالة vfio_ap_mdev_for_queue - حيث هو مطلوب - لأنه يجب أخذه قبل قفل mdevs_lock للالتزام بترتيب القفل الصحيح ومنع حدوث خطأ lockdep splat؛ أيضًا لأن موديل mdevs_lock ضروري هناك للوصول إلى الحقول داخل كائن matrix_mdev في تلك الدالة.

انظر الملف vfio-ap-locking.rst في شجرة نواة لينكس.

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

مسؤول

Linux

حجز

11/09/2026

إفشاء

16/09/2026

الاعتدال

تمت الموافقة

إدخال

VDB-405805

EPSS

0.00000

KEV

لا

النشاطات

منخفض جدًا

المصادر

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!