В ядре Linux устранена следующая уязвимость:
veth: исправлена утечка NAPI в пути ошибки включения XDP
Во время включения XDP в veth, если xdp_rxq_info_reg() или
xdp_rxq_info_reg_mem_model() завершается сбоем, драйвер откатывает изменения. Однако цикл отката:
for (i--; я >= start; я--) {
уменьшает индекс цикла «i» перед первой итерацией. Это
корректно пропускает отмену регистрации rxq для неудачного индекса 'i' (так как
регистрация не удалась или уже была очищена), но это также
ошибочно пропускает вызов netif_napi_deli() для rq[i].xdp_napi.
Поскольку функция netif_napi_add() уже была вызвана для индекса «i», остается
висячая структура napi_struct в списке napi_list устройства. Когда вет
устройство впоследствии уничтожается, освобождается память очереди (содержащая
утекшую структуру NAPI) можно использовать повторно. Последующее демонтаж устройства повторяет список NAPI и
повреждает перераспределенную память, что приводит к UAF.
Исправьте это, явно удалив ассоциацию NAPI для неудачного
индекс «i» перед откатом успешно настроенных очередей.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: veth: fix NAPI leak in XDP enable error path During XDP enablement in veth, if xdp_rxq_info_reg() or xdp_rxq_info_reg_mem_model() fails, the driver rolls back the changes. However, the rollback loop: for (i--; i >= start; i--) { decrements the loop index 'i' before the first iteration. This correctly skips unregistering the rxq for the failed index 'i' (as registration failed or was already cleaned up), but it also erroneously skips calling netif_napi_deli() for rq[i].xdp_napi. Since netif_napi_add() was already called for index 'i', this leaves a dangling napi_struct in the device's napi_list. When the veth device is later destroyed, the freed queue memory (which contains the leaked NAPI structure) can be reused. The subsequent device teardown iterates the NAPI list and corrupts the reallocated memory, leading to UAF. Fix this by explicitly deleting the NAPI association for the failed index 'i' before rolling back the successfully configured queues.
Характеристики атаки
Последствия
Строка CVSS v3.1