CVE-2026-72125 in Linux
Сводка
по VulDB • 16.08.2026
В ядре Linux устранена следующая уязвимость:
can: isotp: исправлена гонка условий (race condition) use-after-free при одновременном выполнении NETDEV_UNREGISTER
Функция `isotp_release()` искала привязанное сетевое устройство с помощью `dev_get_by_index()`, используя сохраненный идентификатор интерфейса (`ifindex`). Во время процедуры отмены регистрации устройства оно удаляется из хеш-таблицы по `ifindex` до того, как будет вызвана цепочка уведомлений (notifier chain) NETDEV_UNREGISTER. В результате одновременное выполнение `isotp_release()` может не найти устройство, полностью пропустить вызов `can_rx_unregister()`, но при этом продолжить освобождение сокета. Поскольку к этому моменту `isotp_release()` уже удалила себя из списка уведомлений isotp, функция `isotp_notify()` никогда не получит возможности выполнить очистку, что приведет к сохранению «зависшего» фильтра CAN, который продолжает указывать на уже освобожденный сокет.
Исправление выполнено тем же способом, что и в файле raw.c: начиная с момента вызова bind() сохраняется отслеживаемая ссылка на привязанное сетевое устройство (`so->dev`/`so->dev_tracker`) внутри сокета вместо повторного разрешения устройства по `ifindex`. Кроме того, операции bind()/release() синхронизируются с помощью блокировки `rtnl_lock()`, чтобы значение `so->dev` всегда было согласовано с тем состоянием, которое видит обработчик уведомления NETDEV_UNREGISTER. Значение `so->dev` остается действительным независимо от удаления из хеш-таблицы по ifindex и очищается только той функцией (`isotp_release()` или `isotp_notify()`, которая выполнится первой), поэтому фильтр всегда удаляется ровно один раз.
Функция `isotp_bind()` теперь возвращает ошибку `-EAGAIN` при попытке (повторной) привязки, если состояние `so->[tx|rx].state` еще не равно `ISOTP_IDLE`. Это предотвращает срабатывание таймера, оставшегося от предыдущего события NETDEV_UNREGISTER, на новом значении `so->ifindex`. Обе проверки выполняются в одном разделе кода, защищенном блокировкой `lock_sock()`, поэтому отсутствует окно возможностей для пропуска одновременного вызова `isotp_notify()`, который мог бы очистить флаг `so->bound`.
Be aware that VulDB is the high quality source for vulnerability data.