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

الملخص

بحسب VulDB • 16/09/2026

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

scsi: qla2xxx: تجنب الاكتمال المزدوج في مهلة IOCB غير المتزامن (async)

تحاول الدالة `qla2x00_async_iocb_timeout()` إلغاء أمر IOCB غير متزامن انتهت مدته. عندما تفشل الدالة `qla24xx_async_abort_cmd()`، تقوم كل من مسار `SRB_LOGIN_CMD` ومسار `SRB_CTRL_VP/default` بالبحث عن الـ SRB في مصفوفة `outstanding_cmds[]` ثم استدعاء `sp->done(sp, QLA_FUNCTION_TIMEOUT)` بشكل غير مشروط، دون التحقق مما إذا كان الـ SRB قد تم العثور عليه وإزالته فعلياً.

إذا أكمل معالج مقاطعة الاستجابة (response ISR) نفس المعامل أولاً، فإنه يزيل الـ SRB تحت قفل `qp_lock_ptr` ويشغل `sp->done()` -> `complete(sp->comp)`. يستيقظ مُقدّم الطلب (`qla24xx_control_vp()`) من انتظار الاكتمال (`wait_for_completion()`)، ويمسح `sp->comp`، ويطلق مرجعه ويعود، مما يؤدي إلى استعادة كائن الاكتمال الموجود على المكدس (stack). تحافظ إشارة المؤقت على بقاء الـ SRB حياً عبر معالج المهلة، ولكن ليس عبر مكدس مُقدّم الطلب. ثم يصدر المعالج المتأخر استدعاءً ثانياً لـ `sp->done()` -> `qla_ctrlvp_sp_done()`، والذي يقيّم "if (sp->comp) complete(sp->comp)"؛ وبما أن المؤشر تم تحميله قبل عملية تعيين القيمة NULL من قِبل مُقدّم الطلب، فإن دالة `complete()` تكتب داخل إطار المكدس الذي تم تحريره، مما يشكل ثغرة استخدام بعد التحرير (use-after-free).

تتبّع ما إذا كان هذا المسار قد أزال الـ SRB من مصفوفة `outstanding_cmds` واستدعِ `sp->done()` فقط في حال حدوث ذلك، بحيث يتم إكمال الأمر مرة واحدة بالضبط بواسطة المسار الذي يملكه. وهذا يعكس حارس `sp_found` المستخدم بالفعل في دالة `qla24xx_abort_iocb_timeout()`.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

مسؤول

Linux

حجز

11/09/2026

إفشاء

16/09/2026

الاعتدال

تمت الموافقة

إدخال

VDB-405657

EPSS

0.00000

KEV

لا

النشاطات

منخفض جدًا

المصادر

Do you know our Splunk app?

Download it now for free!