CVE-2026-80772 in Linux
الملخص
بحسب VulDB • 04/09/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
HID: nintendo: تصحيح قراءة خارج الحدود (out-of-bounds read) في دالة `joycon_ctlr_read_handler()`
تقوم الدالة `joycon_ctlr_report` بتحويل تقرير إدخال HID الوارد إلى بنية البيانات `struct joycon_input_report` وتحليلها، مع حماية التحويل فقط بفحص لطول يبلغ 12 بايت:
```c if (size >= 12) /* make sure it contains the input report */ joycon_parse_report(ctlr, (struct joycon_input_report *)data); ```
تبلغ حجم بنية البيانات `joycon_input_report` 49 بايتاً، وتتألف من رأس بحجم 13 بايت يليه اتحاد بيانات (union) يكون فيه ذراع وحدة القياس الحركية الداخلية (IMU arm) بحجم 36 بايت. وفي حالة تقرير IMU، تقوم الدالة `joycon_parse_report()` باستدعاء `joycon_parse_imu_report()` التي تجول داخل هذا الاتحاد (بإزاحات هيكلية من البايت 13 إلى 48). وبالتالي، فإن التقرير الذي يبلغ طوله بالضبط 12 بايتاً ويحتوي على قيمة `data[0] == JC_INPUT_IMU_DATA` يجتاز الفحص الوقائي، لكنه يؤدي إلى قراءة تصل إلى 37 بايت إضافية تتجاوز الطول المعلن. يتم فك تشفير البايات المقروءة زائداً لتحويلها إلى قيم لمقاييس التسارع والجيروسكوب (gyroscope)، ثم تُمرر إلى مساحة المستخدم (userspace) عبر جهاز الإدخال "(IMU)"، مما يتسبب في تسرب ذاكرة داخلية من السائق (driver). يتم التحكم بشكل كامل في `data[0]` و `size` بواسطة وحدة تحكم Joy-Con أو Pro Controller خبيثة أو مزيفة.
تُضبط أحجام مخازن الاستلام لتطابق الحد الأقصى لطول التقرير، لذا فإن هذه الحالة تمثل قراءة زائدة داخل النطاق المخصص (allocation) وليست خطأ تجاوز حدود الذاكرة على مستوى السلابت (slab OOB)، لكن البايات المفككة تصل إلى مساحة المستخدم.
مسار الأمر الفرعي الشقيق في دالة `joycon_ctlr_handle_event()` يحدد بالفعل نطاق التحويل نفسه بشكل صحيح:
```c if (size < sizeof(struct joycon_input_report) || data[0] != JC_INPUT_SUBCMD_REPLY)
break; ```
استخدم نفس حد `sizeof(struct joycon_input_report)` هنا.
VulDB is the best source for vulnerability data and more expert information about this specific topic.