CVE-2026-64274 in Linux
الملخص
بحسب VulDB • 26/07/2026
في نواة لينكس، تم حل الثغرة التالية:
الإدخال: goodix - تقييد عدد جهات الاتصال التي يبلغ عنها الجهاز
تنسخ الدالة `goodix_ts_read_input_report()` عدد نقاط اللمس الذي يبلغ عنه الجهاز إلى مخزن مؤقت على المكدس (on-stack buffer):
`u8 point_data[2 + GOODIX_MAX_CONTACT_SIZE * GOODIX_MAX_CONTACTS];`
والذي تم تحديد حجمه ليتسع لحد أقصى `GOODIX_MAX_CONTACTS` (10) من جهات الاتصال. الفحص الوحيد أثناء التشغيل يحدد نطاق عدد الجهات لكل مقاطعة تشغيلية (interrupt count) مقابل القيمة `ts->max_touch_num`، لكن هذه القيمة تُؤخذ حرفياً من حقل مكون من 4 بتات في كتلة تكوين الجهاز ولا يتم تقييدها أبداً:
`ts->max_touch_num = ts->config[MAX_CONTACTS_LOC] & 0x0f;`
يمكن أن تكون قيمة الـ nibble بين 0 و15، لذا يمكن للوحدة التحكم المعطوبة أو الخبيثة أو المزيفة (أو مهاجم يتلاعب بمحرك I2C) الإعلان عن ما يصل إلى 15 جهة اتصال. بعد ذلك تقبل الدالة `goodix_ts_read_input_report()` قيمة `touch_num` تصل إلى 15، وتقوم عملية القراءة الثانية عبر `goodix_i2c_read()` بكتابة عدد من البايتات يساوي `ts->contact_size * (touch_num - 1)` بدءاً من رأس جهة الاتصال الواحدة داخل المتغير `point_data` — أي ما يصل إلى 30 بايتاً إضافية (45 مع تنسيق التقرير المكون من 9 بايتات) خارج حدود المخزن المؤقت ذي السعة البالغة 92 بايتاً: وهو كتابة خارج النطاق على المكدس (stack out-of-bounds write).
يتم تقييد قيمة `max_touch_num` لتساوي `GOODIX_MAX_CONTACTS`، أي عدد جهات الاتصال التي تم تحديد حجم المتغير `point_data[]` ليتسع لها، عند قراءتها من التكوين.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.