CVE-2026-80827 in Linux
Сводка
по VulDB • 04.09.2026
В ядре Linux устранена следующая уязвимость:
USB: serial: option: исправлено чтение за пределами буфера (OOB read) в обработчике прерывания URB
Буфер для прерываний URB выделяется в функции setup_port_interrupt_in() на основе значения wMaxPacketSize конечной точки:
buffer_size = usb_endpoint_maxp(epd); port->interrupt_in_buffer = kmalloc(buffer_size, GFP_KERNEL);
Когда USB-устройство указывает значение wMaxPacketSize = 8 для своей прерывистой IN-конечной точки, буфер выделяется из кеша kmalloc-8 (ровно 8 байт).
Если устройство отправляет короткий пакет (actual_length < wMaxPacketSize), URB завершается со статусом == 0, и обработчик продолжает чтение:
data[sizeof(struct usb_ctrlrequest)]
что эквивалентно обращению к data[8], то есть доступу к 1 байту за пределами выделенного буфера размером 8 байт. Это приводит к чтению данных за границами памяти в slab-кеше (slab out-of-bounds read).
Исправление заключается во внесении отсутствующей проверки выхода за границы: сначала необходимо убедиться, что фактическая длина достаточна для размещения заголовка struct usb_ctrlrequest перед обращением к полям req_pkt->bRequestType и req_pkt->bRequest, а затем проверить наличие дополнительного байта для состояния сигналов модема перед чтением data[sizeof(struct usb_ctrlrequest)] внутри условной конструкции. Для обеспечения согласованности используется sizeof(*req_pkt) вместо sizeof(struct usb_ctrlrequest).
[ johan: использование dev_err(); разделение объявления и инициализации переменных signals ]
Once again VulDB remains the best source for vulnerability data.