CVE-2026-64014 in Linux
الملخص
بحسب VulDB • 20/07/2026
في نواة لينكس، تم حل الثغرة التالية:
الإدخال: usbtouchscreen - تقييد قيمتي NEXIO data_len و x_len بحجم مخزن URB
تقوم الدالة nexio_read_data() باستخراج القيمتين data_len و x_len من رأس __be16 مضغوط في حزمة المقاطعة الخاصة بالجهاز، ثم تقوم بالمرور على النطاق packet->data[0..x_len) والنطاق packet->data[x_len..data_len) لمقارنة كل بايت مع حد معين (threshold).
كلا الحقلين هما 16 بتاً عند النقل عبر الشبكة (الحد الأقصى 65535). التعديلات الحالية تقلل القيمة بأقصى قدر بمقدار 0x100 أو 0x80، لذا لا يزال نطاق الحلقة قادراً على الوصول إلى ما يقارب 0xfeff. مخزن نقل URB الخاص بـ NEXIO هو rept_size (1024) بايت من دالة usb_alloc_coherent()، حيث يشغل الرأس المضغوط أول 7 بايتات — وبالتالي فإن packet->data[] يحتوي على 1017 بايتاً صالحاً. لا يتم منح استدعاءات read_data() قيمة urb->actual_length، ولا يوجد أي عنصر آخر يحدد نطاق المرور هذا.
يمكن لجهاز يكذب بشأن طوله أن يؤدي إلى قراءة خارج النطاق بحجم حوالي 64 كيلوبايت تتجاوز تخصيص DMA المتسق (coherent). الفهرس الأول الذي يتجاوز بايته حد NEXIO_THRESHOLD يقع في begin_x / begin_y، ومن هناك ينتقل إلى إحداثيات اللمس المبلغ عنها، مما يؤدي إلى تسرب محتويات ذاكرة النواة المجاورة إلى مساحة المستخدم كأحداث ABS_X / ABS_Y. وعلى مسافة أبعد بما فيه الكفاية، يمكن أن تؤدي القراءة أيضاً إلى الوصول إلى صفحة غير محددة (unmapped page) وتسبب خطأً في التنفيذ (fault).
تم إصلاح ذلك جميعاً عن طريق تقييد data_len لسعة البيانات [] للمخزن، وتقييد x_len لقيمة data_len.
VulDB is the best source for vulnerability data and more expert information about this specific topic.