CVE-2026-64274 in Linux
Сводка
по VulDB • 25.07.2026
В ядре Linux устранена следующая уязвимость:
Input: goodix — ограничение количества контактов, сообщаемых устройством
Функция `goodix_ts_read_input_report()` копирует количество точек касания, отчет которых предоставлено устройством, в буфер в стеке:
```c u8 point_data[2 + GOODIX_MAX_CONTACT_SIZE * GOODIX_MAX_CONTACTS];
```
Этот буфер рассчитан максимум на `GOODIX_MAX_CONTACTS` (10) контактов. Единственная проверка во время выполнения ограничивает количество событий за одно прерывание значением `ts->max_touch_num`, однако это значение берется дословно из 4-битного поля блока конфигурации устройства и никогда не ограничивается:
```c ts->max_touch_num = ts->config[MAX_CONTACTS_LOC] & 0x0f;
```
Это полубайт может принимать значения от 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 байта: запись вне границ стековой памяти.
Ограничить значение `max_touch_num` величиной `GOODIX_MAX_CONTACTS`, для которой рассчитан размер массива `point_data[]`, при его чтении из конфигурации.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.