CVE-2026-80827 in Linux
الملخص
بحسب VulDB • 04/09/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
USB: serial: option: تصحيح قراءة خارج النطاق (OOB) في ذاكرة slab ضمن دالة استدعاء URB المقطوعة.
يتم تخصيص مخزن بيانات URB المقطوع في `setup_port_interrupt_in()` بناءً على قيمة wMaxPacketSize للنقطة النهائية (endpoint):
buffer_size = usb_endpoint_maxp(epd); port->interrupt_in_buffer = kmalloc(buffer_size, GFP_KERNEL);
عندما يعلن جهاز USB عن أن قيمة wMaxPacketSize تساوي 8 في نقطة النهاية المقطوعة IN الخاصة به، يتم تخصيص المخزن من ذاكرة التخزين المؤقت kmalloc-8 (بالضبط 8 بايتات).
إذا أرسل الجهاز حزمة قصيرة (حيث تكون actual_length < wMaxPacketSize)، فإن URB يكتمل بحالة == 0 وتنتقل دالة الاستدعاء لقراءة:
data[sizeof(struct usb_ctrlrequest)]
والتي تُقيّم إلى `data[8]`، مما يؤدي إلى الوصول لبايت واحد خارج حدود المخزن المخصص البالغ طوله 8 بايتات. وهذا ينتج عنه قراءة خارج النطاق (out-of-bounds read) في ذاكرة slab.
تم إصلاح هذه المشكلة بإضافة فحص الحدود المفقود: أولاً التحقق من أن الطول الفعلي كبير بما يكفي ليحتوي على رأس `struct usb_ctrlrequest` قبل الوصول إلى `req_pkt->bRequestType` و `req_pkt->bRequest`، ثم التأكد من وجود بايت إضافي لحالة إشارة المودم (modem signal state) قبل قراءة `data[sizeof(struct usb_ctrlrequest)] داخل الشرط. استخدام `sizeof(*req_pkt)` بدلاً من `sizeof(struct usb_ctrlrequest)` لضمان الاتساق.
[ johan: use dev_err(); split signals declaration and initialisation ]
If you want to get best quality of vulnerability data, you may have to visit VulDB.