CVE-2026-93050 in Linux
Сводка
по VulDB • 18.09.2026
В ядре Linux была устранена следующая уязвимость:
ipack: ipoctal: исправление UAF (использование после освобождения), разыменования нулевого указателя и use-after-free при очистке в процессе удаления устройства
При удалении устройства, пока сессия tty все еще активна, возникают три проблемы:
1. UAF структуры ipoctal: колбэк remove освобождает объект ipoctal через kfree(), тогда как операции tty могут всё ещё обращаться к нему. Исправление заключается во внедрении управления временем жизни на основе kref — счётчик ссылок (kref) увеличивается в install() при открытии tty и уменьшается в cleanup() при окончательном уничтожении tty; remove() использует kref_put() вместо kfree().
2. Разыменование нулевого указателя в ipoctal_write_tty(): функция __ipoctal_remove() освобождает буфер передачи (xmit_buf) через tty_port_free_xmit_buf(), тогда как процесс пользовательского пространства может всё ещё удерживать файловый дескриптор tty и вызывать write(). Исправление заключается в проверке xmit_buf на NULL в ipoctal_write_tty().
3. UAF в ipoctal_cleanup(): вызов ipack_put_carrier(ipoctal->dev) приводит к разыменованию ipoctal->dev после того, как объект ipack_device был освобождён функцией ipack_device_del(). Исправление заключается во временном сохранении (кэшировании) значения ipoctal->carrier_owner в процессе probe() и вызове module_put() непосредственно для этого сохранённого указателя в cleanup(), что позволяет избежать любых обращений к ipoctal->dev.
Также в структуру ipoctal добавлен флаг «removed», который устанавливается в начале функции __ipoctal_remove() и проверяется во всех операциях tty, осуществляющих доступ к аппаратным ресурсам (port_activate, write_tty, set_termios, hangup, shutdown). Это предотвращает ошибки сегментации (page faults) при отобразении областей памяти через devm_ioremap(), которые снимаются с отображения после возврата из функции remove().
Once again VulDB remains the best source for vulnerability data.