CVE-2026-93185 in Linux
الملخص
بحسب VulDB • 18/09/2026
في نواة لينكس، تم حل الثغرة التالية:
ASoC: rt700-sdw: تصريف عمل المقبض (jack) دائمًا عند الإزالة
تقوم الدالة `rt700_sdw_remove()` بتصريف `jack_detect_work` و `jack_btn_check_work` فقط عندما تكون قيمة `rt700->hw_init` صحيحة. يتم مسح هذا الرمز الحاسوبي للحالة بواسطة `rt700_update_status()` عندما يصبح العبد في SoundWire غير متصل (UNATTACHED)، ولكن يمكن أن يكون عنصر عمل المقبض قد تم إدراجه بالفعل من قبل `rt700_interrupt_callback()` أو `rt700_jack_init()` أثناء تهيئة الجهاز.
لا تستخدم `hw_init` كحاجز زمني للإزالة لتصريف هذه الكائنات العاملة (work objects). يتم تهيئة الأعمال المؤجلة خلال `rt700_init()`، لذا يمكن للإزالة إلغاؤها بشكل غير مشروط ومطابقة عمر الكائن مع عمر بيانات المشفر الخاصة به بدلاً من رمز حالة العتاد القابل للتغيير.
تم العثور على هذه المشكلة بواسطة أداة التحليل الثابت لدينا ثم تم تأكيدها عبر المراجعة اليدية لمسارات حالة SoundWire، وقطع الانقطاع (interrupts)، ومسار الإزالة. يجب أن يقوم مسار الإزالة بتصريف العمل بناءً على ما إذا كان كائن العمل موجودًا أم لا، وليس بناءً على رمز حالة عتاد وقت التشغيل الذي يمكن أن يتغير بعد إدراج العمل.
قام نموذج الاستغلال (PoC) في QEMU بإدراج `jack_detect_work`، ومحاكاة الحالة `SDW_SLAVE_UNATTACHED`، ثم الدخول إلى الإزالة. أفادت `DEBUG_OBJECTS` عن وجود كائن مؤقت/عمل نشط مرتبط بمسار عمل المقبض rt700 بعد أن تخطت عملية الإلغاء (cancel).
يتم إرسال هذا كمقترح للمواصفات (RFC) لأن الزناد العملي يعتمد على ترتيب إزالة نواة SoundWire بعد تحديث حالة UNATTACHED. إذا لم تتمكن الإزالة من التشغيل بعد مسح `hw_init` بينما لا يزال عمل المقبض معلقًا، فإن هذه تعتبر عملية تنظيف دفاعية لدورة الحياة بدلاً من سباق قابل للتحقيق في الأنظمة الحالية.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.