CVE-2026-80772 in Linux
Сводка
по VulDB • 04.09.2026
В ядре Linux была устранена следующая уязвимость:
HID: nintendo: исправлено чтение за пределами буфера в функции joycon_ctlr_read_handler()
Функция joycon_ctlr_read_handler() преобразует входящий отчет ввода HID к типу struct joycon_input_report и анализирует его, проверяя корректность приведения типа только с помощью проверки длины на 12 байт:
if (size >= 12) /* убедиться, что содержит отчет ввода */ joycon_parse_report(ctlr, (struct joycon_input_report *)data);
Структура struct joycon_input_report имеет размер 49 байт: заголовок длиной 13 байтов и объединение (union), поле IMU которого занимает 36 байт. Для отчета IMU функция joycon_parse_report() вызывает joycon_parse_imu_report(), которая проходит по этому объединению (смещения структуры с 13 по 48), поэтому отчет ровно из 12 байт, в котором data[0] == JC_INPUT_IMU_DATA, проходит проверку защиты, но приводит к чтению до 37 байтов за пределами его объявленной длины. Считанные лишние байты декодируются как значения акселерометра/гироскопа и передаются в пространство пользователя через устройство ввода "(IMU)", что приводит к утечке внутренних данных драйвера. Значения data[0] и size полностью контролируются злонамеренным или поддельным контроллером Joy-Con/Pro Controller.
Буферы приема имеют размер, равный максимальной длине отчета, поэтому это чтение за пределами выделенного блока (over-read), а не выход за пределы slab-объекта (slab OOB); однако декодированные байты все равно достигают пространства пользователя.
Смежный путь подкоманд в функции joycon_ctlr_handle_event() уже корректно ограничивает то же самое приведение типа:
if (size < sizeof(struct joycon_input_report) || data[0] != JC_INPUT_SUBCMD_REPLY)
break;
Использовать такое же ограничение с помощью sizeof(struct joycon_input_report) и здесь.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.