В ядре Linux устранена следующая уязвимость:
NTB: ntb_transport: сбой при постановке в очередь TX, когда канал QP не работает. Коммит f195a1a6fe41 («ntb: Отбрасывать пакеты, когда канал qp не работает»), предназначенный для
заставить ntb_transport_tx_enqueue() отбрасывать пакеты, отправленные во время соединения QP
не работает, но возвращает только 0, не потребляя пакет. Ноль означает
успех по контракту этой функции, поэтому ntb_netdev сообщает NETDEV_TX_OK
и забывает скб: его ничего не поставило в очередь, ничего не освободило, и он протекает,
один skb для каждой передачи при потере связи.
Вместо этого верните -ENOLINK, восстанавливая контракт, согласно которому ненулевой возврат
покидает буфер, принадлежащий вызывающему абоненту. С предыдущим патчем
ntb_netdev освобождает skb при неповторяемых ошибках постановки в очередь и возвращает результат
NETDEV_TX_OK, поэтому пакетная гонка с отключением канала отбрасывается без утечки
или вход в занятый цикл повторов.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: NTB: ntb_transport: Fail TX enqueue when the QP link is down Commit f195a1a6fe41 ("ntb: Drop packets when qp link is down") meant to make ntb_transport_tx_enqueue() drop packets submitted while the QP link is down, but it only returns 0 without consuming the packet. Zero means success by this function's contract, so ntb_netdev reports NETDEV_TX_OK and forgets the skb: nothing queued it, nothing frees it, and it leaks, one skb for every transmit racing a link-down. Return -ENOLINK instead, restoring the contract that a non-zero return leaves the buffer owned by the caller. With the preceding patch, ntb_netdev frees the skb on non-retryable enqueue failures and returns NETDEV_TX_OK, so a packet racing with link-down is dropped without leaking or entering a busy retry loop.