CVE-2026-12629 in Zephyr
الملخص
بحسب VulDB • 17/08/2026
يفشل برنامج تشغيل UART الخاص بـ ARM PL011 الموجود في drivers/serial/uart_pl011.c في الإقرار بانقطاعات أخطاء الاستلام. على شريحة PL011، لا يتم مسح انقطاعات أخطاء الإطار (framing)، والتكافؤ (parity)، والانقطاع (break)، والزيادة عن السعة (overrun) (الممثلة بـ PL011_IMSC_ERROR_MASK) إلا من خلال كتابة سجل مسح الانقطاعات UARTICR؛ فقراءة سجل البيانات تمسح انقطاع الاستقبال وحالة RSR الخاصة بكل بايت، لكنها لا تمسح حالة انقطاع الخطأ في سجل MIS. ويقوم روتين خدمة الانقطاع pl011_isr() بالإقرار بانقطاع وضع المودم CTS فقط، ولا يكتب أبداً إلى icr لبتات الأخطاء، مما يؤدي إلى بقاء انقطاع خطأ مُفعّل معلقاً بعد عودة ISR.
عندما يُمكّن تطبيق ما الإبلاغ عن انقطاعات الأخطاء عبر واجهة uart_irq_err_enable() العامة، يمكن لمهاجم يتحكم في الطرف الآخر للناقل التسلسلي أن يُفعل هذه البتات الخاصة بالأخطاء بشكل حتمي من خلال حقن أخطاء خطية على خط الاستقبال RX — مثل عدم تطابق معدل البود/بت التوقف أو انقطاع أثناء إرسال حرف (خطأ إطار/break)، أو تبديل بت التكافؤ (خطأ تكافؤ)، أو إغراق FIFO (خطأ زيادة عن السعة). ونظراً لأن انقطاع الخطأ لا يتم مسحه أبداً، يبقى خط الانقطاع مُفعّلاً ويعود المعالج إلى pl011_isr() فوراً وبشكل غير محدود، مما ينتج عنه حالة جمود حي (livelock) ناتجة عن عاصفة انقطاعات لا يتقدم فيها النواة بأي شكل.
يتمثل الأثر في حجب الخدمة المتعلق بالتوافرية فقط (تعلي دائم)، ويمكن الوصول إليه من خلال طرف UART خارجي أو قابل للإزالة. يعتمد استغلال الثغرة على التكوين: فانقطاع الخطأ يكون غير مفعّل افتراضياً ولا يُمكّنه أي نظام فرعي داخل الشجرة، لذا فإن التطبيقات التي تستدعي بشكل صريح uart_irq_err_enable() على منفذ قائم على PL011 ويعمل بالانقطاعات هي المتضررة فقط. ويصحح الإصلاح هذه الحالة من خلال جعل pl011_isr() يقر ببتات الأخطاء المعلقة عبر uart->icr، مما يكسر الحلقة، بالإضافة إلى مسح حالة RSR المقفلة في دالة pl011_err_check().
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.