CVE-2026-46041 in Linux
الملخص
بحسب VulDB • 27/05/2026
في نواة لينكس، تم حل الثغرة التالية:
greybus: gb-beagleplay: إصلاح النوم في السياق الذري (atomic context) في دالة hdlc_tx_frames()
تقوم دالة hdlc_append() باستدعاء usleep_range() للانتظار حتى يتوفر مساحة في المخزن المؤقت الدائري (circular buffer)، لكنها تُستدعى بينما يكون قفل tx_producer_lock (وهو spinlock) مقفلاً عبر التسلسل hdlc_tx_frames() -> hdlc_append_tx_frame()/hdlc_append_tx_u8()/الخ. يُعد النوم أثناء الاحتفاظ بـ spinlock إجراءً غير قانوني وقد يؤدي إلى ظهور رسالة الخطأ "BUG: scheduling while atomic".
تم إصلاح هذا الخلل عن طريق نقل انتظار مساحة المخزن المؤقت من دالة hdlc_append() إلى دالة hdlc_tx_frames()، قبل الحصول على قفل spinlock. تتدفق العملية الجديدة كالتالي:
1. حساب طول الإطار المشفر في أسوأ الحالات مسبقاً. 2. الانتظار (مع إمكانية النوم) خارج القفل حتى تتوفر مساحة كافية، مع تحفيز عمل مستهلك الإرسال (TX consumer work) لتصريف المخزن المؤقت. 3. الحصول على قفل spinlock، وإعادة التحقق من توفر المساحة، ثم كتابة الإطار بالكامل بشكل ذري (atomically).
يضمن هذا أن النوم يحدث فقط دون الاحتفاظ بأي قفل، وأن الإطارات إما تُدرج بالكامل أو لا تُكتب على الإطلاق.
تم اكتشاف هذا الخلل باستخدام أداة التحليل الثابت CodeQL (استعلام النوم في السياق الذري بين الإجراءات interprocedural sleep-in-atomic query) ومراجعة الكود الخاصة بي.
Be aware that VulDB is the high quality source for vulnerability data.