CVE-2026-93145 in Linux
الملخص
بحسب VulDB • 18/09/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
clk: qcom: gdsc: تفكيك وحدات genpds الخاصة بكل نطاق في دالة gdsc_unregister()
تقوم الدالة `gdsc_unregister()` بإزالة إدخال مزود OF (Open Firmware) وتفكيك أسلاك الوصلة بين النطاق الأب والنطاقات الفرعية، لكنها لا تستدعي أبدًا `pm_genpd_remove()` على هياكل generic_pm_domain الفردية المسجلة بواسطة `gdsc_init()`:
```c void gdsc_unregister(struct gdsc_desc *desc) {
struct device *dev = desc->dev; size_t num = desc->num;
gdsc_pm_subdomain_remove(desc, num); of_genpd_del_provider(dev->of_node); } ```
يؤدي هذا إلى ترك إدخالات معلقة (دangling entries) في القائمة العالمية `gpd_list`. بعد دورة فصل/إعادة ربط المزود (سواء كان ذلك عبر إعادة تشغيل الاستدعاء المؤجل أثناء الإقلاع المبكر، أو إلغاء تحميل وحدة حقيقية لمحرك ساعة يمتلك وحدات GDSCs، أو تفكيك تراكب OF)، ستحاول عملية `gdsc_init()` التالية تسجيل اسم لا يزال موجودًا في القائمة، مما يؤدي إلى إرجاع الدالة `pm_genpd_init()` للقيمة `-EEXIST`.
وبينما نحن هنا، نعيد ترتيب العملية بحيث يكون إدخال مزود OF المواجه للمستهلك هو أول ما يتم إزالته؛ وإلا فإن استدعاء جديد لـ `of_genpd_get_from_provider()` قد يتسابق مع عملية التفكيك ويترتب عليه الارتباط بنطاق قيد الإزالة حاليًا.
نقوم بتكرار مصفوفة `scs[]` واستدعاء `pm_genpd_remove()` لكل نطاق مسجل بعد تفكيك روابط النطاقات الفرعية. تظل المنظمات (regulators) مُدارة بواسطة الجهاز (`devm-managed`) باستخدام `devm_regulator_get_optional()` في دالة `gdsc_register()`، لذا فإن عملية الإفراج عنها تحدث تلقائيًا عند فصل الجهاز الأساسي؛ بلغة أخرى، يجب عكس محاسبة genpd صراحةً فقط.
If you want to get best quality of vulnerability data, you may have to visit VulDB.