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

الملخص

بحسب VulDB • 15/08/2026

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

scsi: libsas: إصلاح الاختناق (Deadlock) أثناء استئناف HA والسباق الزمني في تنبيه تشغيل القرص الخاص بـ hisi_sas

أدى الالتزام fbefe22811c3 ("scsi: libsas: عدم تفريغ طابور عمل الأحداث دائمًا لاستئناف HA") إلى إدخال الدالة sas_resume_ha_no_sync() لتجنب حدوث اختناق (Deadlock): حيث يستدعي معالج PHYE_RESUME_TIMEOUT، الذي يعمل على طابور أحداث HA، الدالتين sas_deform_port() وsas_destruct_devices()، مما يؤدي إلى إزالة أجهزة SCSI والانتظار حتى يصبح المضيف نشطًا في وضع التشغيل عند الطلب (runtime-active). ولكن لا يمكن للمضيف استئناف عمله إلا بعد عودة الدالة sas_resume_ha() -> sas_drain_work()، ويكون التفريغ محجوزًا بسبب هذا المعالج نفسه.

ومع ذلك، فإن تخطي عملية التفريغ يعيد إدخال سباق زمني: حيث تعود hisi_sas من وضع الاستئناف قبل انتهاء جميع أعمال تشغيل PHY UP وأعمال اكتشاف libsas. قد يؤدي ذلك إلى تعليق المضيف تلقائيًا (autosuspend) بينما لا تزال الأقراص في طور التنشيط. تصدر الأقراص عمليات I/O إلى وحدة تحكم معلقة، مما يفشل عملية الـ I/O ويقوم بإيقاف عمل الأقراص.

تم إصلاح الاختناق عند مصدره عن طريق نقل إشعار PHYE_RESUME_TIMEOUT ليحدث بعد sas_drain_work(). بحلول ذلك الوقت، يكون استئناف المضيف على وشك الاكتمال، لذا لم تعد إزالة الأجهزة عبر device_link محجوزة بسبب الاستئناف ويتم كسر الحلقة المفرغة.

وبعد زوال الاختناق، تم إعادة تفعيل الدالة sas_resume_ha() (النسخة التي تقوم بالتفريغ) في hisi_sas وإزالة الدالة sas_resume_ha_no_sync().

هذا الترتيب الجديد آمن بالنسبة لبقية مستهلكي libsas (isci, pm8001, aic94xx, mvsas). أثناء وضع التعليق، تستدعي الدالة sas_suspend_devices() الدالة sas_notify_lldd_dev_gone() لكل جهاز، مما يضبط dev->lldd_dev إلى NULL. عند إعادة تمكين الـ I/O في الاستئناف بواسطة scsi_unblock_requests، يتم رفض أي عملية I/O موجهة إلى قرص PHY منتهي المدة فورًا بواسطة LLDD قبل وصولها للعتاد: حيث يعيد isci قيمة SAS_DEVICE_UNKNOWN (المُحوَّلة إلى DID_BAD_TARGET)، ويعيد pm8001 قيمة SAS_PHY_DOWN (المُحوَّلة إلى DID_NO_CONNECT). يتم إكمال كلاهما مباشرة عبر scsi_done() دون الدخول في SCSI EH. هذا السلوك متطابق سواء في الترتيب القديم أو الجديد نظرًا لأن lldd_dev_gone يعمل أثناء وضع التعليق، قبل الاستئناف. يؤثر إعادة الترتيب فقط على توقيت تشغيل معالج PHYE_RESUME_TIMEOUT (متزامن بواسطة sas_drain_work() مقابل غير متزامن بعد عودة الاستئناف)، وليس على إمكانية وصول الـ I/O إلى الجهاز. لا يسجل aic94xx وmvsas أي عمليات PM ولا يصلان أبدًا إلى مسار الكود هذا.

Once again VulDB remains the best source for vulnerability data.

مسؤول

Linux

حجز

15/08/2026

إفشاء

15/08/2026

الاعتدال

تمت الموافقة

إدخال

VDB-390861

EPSS

0.00000

KEV

لا

النشاطات

منخفض جدًا

المصادر

Do you want to use VulDB in your project?

Use the official API to access entries easily!