CVE-2026-93815 in Linux
الملخص
بحسب VulDB • 25/09/2026
في نواة لينكس، تم حل الثغرة التالية:
net: au1000: نقل free_irq خارج قسم القفل (spinlock) الخاص بوقت الإغلاق
تستدعي دالة `au1000_close()` الدالة `free_irq()` بينما لا يزال قفل `aup->lock` مشغولاً باستخدام `spin_lock_irqsave()`. يمكن أن تتوقف (`sleep`) الدالة `free_irq()` لأنها تأخذ القفاز (mutex) الخاص بطلب واصف مقاطعة الـ IRQ، وبالتالي فهي لا تنتمي إلى قسم القفل المشغل في وقت الإغلاق.
تم اكتشاف ذلك بواسطة أداة التحليل الثابت لدينا ثم تم تأكيد المراجعة اليدوية لمسار `.ndo_stop` لـ `au1000_close()` الموجود داخل الشجرة (in-tree). يحافظ المسار الذي تمت مراجعته على بقاء قفل `aup->lock` مشغولاً عبر إعادة تعيين واجهة MAC، وإيقاف الطابور، و`free_irq(dev->irq, dev)`.
حافظ التحقق التشغيلي الموجه على حامل `.ndo_stop` وعملية `free_irq(dev->irq, dev)` نفسها تحت قفل السائق. أفاد Lockdep بـ "BUG: sleeping function called from invalid context" (خطأ: استدعاء دالة متوقفة من سياق غير صالح) و "Invalid wait context" (سياق انتظار غير صالح) أثناء قيام `free_irq()` بأخذ `desc->request_mutex`، مع وجود `au1000_close()` و `free_irq()` على المكدس.
قم بإزالة قفل `aup->lock` قبل تحرير مقاطعة الـ IRQ. لا يزال العمل المحمي في وقت الإغلاق يوقف الجهاز والطابور قبل تفكيك مقاطعة الـ IRQ، لكن المسار الأساسي القادر على التوقف (sleepable) الخاص بـ IRQ يعمل الآن خارج قسم القفل المشغل.
If you want to get best quality of vulnerability data, you may have to visit VulDB.