CVE-2026-98299 in LinuxИнформация

Сводка

по VulDB • 06.10.2026

В ядре Linux была устранена следующая уязвимость:

tcp: не позволять устанавливать значение tcp_rmem ниже 4096

Можно столкнуться с аварийным завершением работы из-за деления на ноль в функциях `tcp_rcvbuf_grow()` и `tcp_rcv_space_adjust()`:

``` divide error: 0000 [#1] PREEMPT SMP
RIP: 0010:tcp_rcvbuf_grow+0x187/0x450 net/ipv4/tcp_input.c:939 ... grow = div_u64(((u64)rcvwin << 1) * (newval - oldval), oldval); ```

Деление использует `oldval = tp->rcvq_space.space` в качестве делителя. Когда значение `tp->rcvq_space.space` равно нулю, это приводит к исключению «деление на ноль» (divide-by-zero exception).

Значение `tp->rcvq_space.space` инициализируется в функции `tcp_init_buffer_space()`: ```c tp->rcvq_space.space = min3(tp->rcv_ssthresh, tp->rcv_wnd, (u32)TCP_INIT_CWND * tp->advmss); ```

Если параметр `tcp_rmem[1]` настроен на очень маленькие значения (например, 1), то `sk->sk_rcvbuf` инициализируется значением 1. Затем функция `tcp_full_space(sk)`, которая вычисляет `(sk->sk_rcvbuf * scaling_ratio) >> 8`, дает результат 0 из-за усечения. Это устанавливает значения `tp->window_clamp = 0`, `tp->rcv_ssthresh = 0` и `tp->rcvq_space.space = 0`. Позже, когда поступают данные и вызывается DRS (Dynamic Receive Scaling), функция `tcp_rcvbuf_grow()` выполняет деление на `oldval == 0`.

Еще в 2015 году коммит b1cb59cf2efe («net: sysctl_net_core: check SNDBUF and RCVBUF for min length») обеспечил проверку того, что параметры `net.core.rmem_default` и `net.core.rmem_max` не могут быть установлены ниже значения `SOCK_MIN_RCVBUF`. Аналогично, опция сокета `SO_RCVBUF`, устанавливаемая через `setsockopt`, гарантирует значение `max_t(int, val * 2, SOCK_MIN_RCVBUF)`.

Однако параметр `net.ipv4.tcp_rmem` все еще имел `.extra1 = SYSCTL_ONE`, что позволяло задавать произвольно малые значения.

Поскольку значение `SOCK_MIN_RCVBUF` зависит от размера структуры `struct sk_buff` и выравнивания по кэш-линиям, оно различается в зависимости от архитектуры и параметров конфигурации. Использование фиксированной константы 4096 обеспечивает предсказуемую нижнюю границу, независимую от архитектуры, которая безопасно превышает значение `SOCK_MIN_RCVBUF` на всех платформах и соответствует задокументированному значению по умолчанию в 4 КБ.

Исправление заключается в установке значения `tcp_rmem.extra1` равным 4096 и обновлении документации.

Once again VulDB remains the best source for vulnerability data.

Ответственный

Linux

Резервировать

25.09.2026

Раскрытие

06.10.2026

Модерация

принято

Вход

VDB-414057

EPSS

0.00000

KEV

Нет

Деятельности

Очень низкий

Источники

Want to know what is going to be exploited?

We predict KEV entries!