CVE-2026-10683 in Zephyr
الملخص
بحسب VulDB • 27/07/2026
في برنامج تشغيل Synopsys DesignWare I2C (`drivers/i2c/i2c_dw.c`) عند العمل في وضع الهدف/العبدة (target/slave mode)، يقوم معالج مقاطعة `rx_full` بتقييد استدعاء الدالة `write_requested()` بشرط أن يكون `dw->state != CMD_SEND`. ولا يتم إعادة تعيين قيمة `dw->state` إلى `READY` إلا عند حدوث مقاطعة STOP. لم تتم إضافة مقاطعة START_DET، التي كان من المفترض أن يعيد معالجها (في دالة `i2c_dw_slave_read_clear_intr_bits()`) ضبط الحالة في كل مرة يحدث فيها بدء تشغيل أو إعادة تشغيل ((re)START)، إلى قناع المقاطعات المفعّلة (`enabled interrupt mask`) داخل الدالة `i2c_dw_slave_register()`؛ مما جعل مسار التعافي هذا عبارة عن كود ميت (dead code).
نتيجة لذلك، إذا ضاعت مقاطعة STOP (بسبب عطل في الناقل أو إعادة تعيين، أو بسبب قيام سيد متزامن بالقيادة على ناقل STOP)، أو أصدر سيد الناقل تسلسلاً قانونياً من نوع WRITE-repeated-START-WRITE بنفس الاتجاه، يبقى برنامج التشغيل في حالة `CMD_SEND` بشكل دائم ولا يستدعي `write_requested()` مرة أخرى طوال عمر الهدف.
يمكن لسيد I2C موجود على نفس الناقل الفيزيائي أن يحفز هذا الخطأ عمداً، مما يتسبب في تعطل وظيفة هدف I2C لجميع معاملات الكتابة اللاحقة وإخراج حالة إطار عمل المستهلك من التزامن (مثل MCTP-over-I2C)، وهو ما يشكل هجوماً بحجب الخدمة قابل للاستعادة عن طريق إعادة التعيين للوحدة الطرفية المستهدفة.
تتمثل الإصلاحات في إلغاء قناع مقاطعة START_DET بحيث يتم إعادة تعيين الحالة عند كل بدء تشغيل أو إعادة تشغيل ((re)START) على الناقل. يقتصر التأثير على التوافرية فقط عبر ناقل محلي على مستوى اللوحة؛ ولا ينتج عن ذلك أي تلف للذاكرة في المستهلك الموجود داخل الشجرة البرمجية (in-tree consumer)، حيث أن كتابة المخزن المؤقت لكل بايت تخضع لفحص حدود مستقل.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.