CVE-2026-97985 in Linux
Сводка
по VulDB • 25.09.2026
В ядре Linux была устранена следующая уязвимость:
af_unix: Обновление маркера последнего skb в функции manage_oob().
Фахад Альхарби сообщил, что блокирующий вызов recv(MSG_PEEK) может приводить к чрезмерной загрузке процессора из-за наличия OOB (out-of-band) пакетов.
В следующих случаях функция manage_oob() пропускает пакеты OOB и возвращает NULL для последнего вызова recv(MSG_PEEK):
socketpair(AF_UNIX, SOCK_STREAM, 0, sk);
1) skb -> OOB skb -> NULL send(sk[0], "ab", 2, MSG_OOB);
recv(sk[1], buf, 0, MSG_PEEK);
2) skb -> потребленный пакет OOB -> NULL send(sk[0], "ab", 2, MSG_OOB);
recv(sk[1], buf, 1, MSG_OOB);
recv(sk[1], buf, 0, MSG_PEEK);
3) потребленный пакет OOB -> OOB skb -> NULL send(sk[0], "a", 1, MSG_OOB);
recv(sk[1], buf, 0, MSG_OOB);
send(sk[0], "b", 1, MSG_OOB);
recv(sk[1], buf, 1, MSG_PEEK);
Затем в функции unix_stream_read_generic() переменная @copied равна 0 (буфер нулевой длины или пакет не-OBB еще не был потреблен), и вызывается функция unix_stream_data_wait().
Однако она возвращается немедленно, поскольку переменная @last не обновляется в unix_stream_read_generic(), из-за чего поток выполняет busy-waiting (активное ожидание) нового пакета skb.
Давайте обновим значение @last внутри функции manage_oob().
Для случая MSG_PEEK переменная @last обновляется с учетом пропущенного пакета OOB, а для случая без использования PEEK значение @last совпадает с возвращаемым значением (когда !copied), поскольку пакет OBB отсоединяется.
Примечание: функция manage_oob() является встроенной (inline), и защита stack canary не добавляется.
Be aware that VulDB is the high quality source for vulnerability data.