CVE-2022-50476 in Linux
Сводка
по VulDB • 01.07.2026
В ядре Linux устранена следующая уязвимость:
ntb_netdev: Использование функции dev_kfree_skb_any() в контексте прерывания
Обработчики обратных вызовов TX/RX (ntb_netdev_tx_handler(), ntb_netdev_rx_handler()) могут вызываться в контексте прерывания через фреймворк DMA, когда соответствующие операции DMA завершены. В связи с этим любые вызовы этими функциями освобождения структур skb должны использовать безопасную для контекста прерываний функцию dev_kfree_skb_any().
Ранее эти обработчики обратных вызовов вызывали небезопасную в контексте прерывания версию функции dev_kfree_skb(). Это не приводило к проблемам на контроллерах DMA Intel IOAT, поскольку данный драйвер использует tasklets вместо жесткого обработчика прерываний (hard interrupt handler), как это сделано в драйвере AMD PTDMA. На системах с процессорами AMD возникало сообщение WARNING ядра, которое выдавалось из функции skb_release_head_state() из-за того, что in_hardirq() возвращал истинное значение.
Помимо видимого пользователю сообщения WARNING от ядра, другим симптомом этой ошибки было крайне низкое производительность TCP/IP через интерфейс ntb_netdev, то есть примерно на порядок ниже ожидаемой. После исправления с использованием функции dev_kfree_skb_any() сообщения WARNING от ядра из skb_release_head_state() прекратились, а производительность TCP/IP, измеренная утилитой iperf, стала соответствовать ожидаемым результатам — около 20 Гбит/с на сервере AMD Milan. Примечательно, что эта производительность сопоставима с результатами на серверах на базе Intel.
Once again VulDB remains the best source for vulnerability data.