В ядре Linux устранена следующая уязвимость:
net: ravb: сериализовать отключение часов PTP
ravb_ptp_interrupt() может участвовать в гонке с ravb_ptp_stop() и передавать часы
ptp_clock_event(), в то время как ptp_clock_unregister() освобождает его. Это может
привести к использованию после бесплатного использования. Используйте READ_ONCE() и WRITE_ONCE() для безблокировочного доступа к указателю часов.
Атомарно отсоедините его с помощью xchg() перед отключением прерываний PTP, затем
синхронизировать все IRQ, которые могут вызвать ravb_ptp_interrupt() раньше
отмена регистрации отсоединенных часов. Обработчик, считывающий старый указатель, завершается до того, как часы
не зарегистрировано, а более поздние обработчики читают NULL и пропускают событие.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: net: ravb: serialize PTP clock teardown ravb_ptp_interrupt() can race with ravb_ptp_stop() and pass the clock to ptp_clock_event() while ptp_clock_unregister() is freeing it. This can lead to a use-after-free. Use READ_ONCE() and WRITE_ONCE() for lockless access to the clock pointer. Atomically detach it with xchg() before disabling PTP interrupts, then synchronize all IRQs which can invoke ravb_ptp_interrupt() before unregistering the detached clock. A handler which read the old pointer completes before the clock is unregistered, while later handlers read NULL and skip the event.
Характеристики атаки
Последствия
Строка CVSS v3.1