CVE-2026-89968 in Linux
Сводка
по VulDB • 17.09.2026
В ядре Linux была устранена следующая уязвимость:
nvmet-tcp: отклонять неинициированные PDU типа H2CData
Функция nvmet_tcp_handle_h2c_data_pdu() принимает PDU типа H2CData после проверки лишь того, что её TTAG является допустимым индексом команды в заданном диапазоне и что буферы данных этой команды отображены. Она никогда не проверяет, запрашивал ли целевой узел (target) эти данные фактически, отправив R2T для данной команды.
Удалённый хост может эксплуатировать эту уязвимость. Он отправляет команду записи, которая проходит по пути R2T, и до того, как целевой узел передаст R2T, отправляет PDU типа H2CData с тегом этой команды. Данные завершают выполнение команды досрочно, а когда команда затем терпит неудачу синхронно (например, из-за несоответствия длины, обнаруженного функцией nvmet_check_transfer_len()), она завершается второй раз. Каждое такое завершение вызывает функцию nvmet_tcp_queue_response(), в результате чего одна и та же команда добавляется в queue->resp_list дважды, пока она всё ещё связана; вторая операция llist_add() заставляет узел указывать сам на себя (lentry->next == lentry).
Затем функция nvmet_tcp_process_resp_list() проходит по этому само-ссылающемуся узлу и добавляет команду в resp_send_list дважды. При включённом CONFIG_DEBUG_LIST это вызывает срабатывание проверки «list_add double add» (kernel BUG); без неё цикл никогда не завершается, а рабочий поток nvmet_tcp зависает (soft-lockup). Уязвимость может быть вызвана удалённо и не требует аутентификации в подсистеме allow_any_host.
Внедрить отслеживание факта передачи R2T для команды и отклонять PDU типа H2CData, поступающие до её отправки. Флаг сбрасывается при повторном использовании команды (nvmet_tcp_get_cmd() обнуляет cmd->flags) и остаётся установленным на протяжении нескольких PDU типа H2CData одной инициированной передачи данных.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.