CVE-2026-98299
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
tcp: nie pozwól, aby tcp_rmem był ustawiony poniżej 4096
Możemy osiągnąć awarię dzielenia przez zero w tcp_rcvbuf_grow()
i tcp_rcv_space_just():
błąd dzielenia: 0000 [#1] PREEMPT SMP
RIP: 0010:tcp_rcvbuf_grow+0x187/0x450 net/ipv4/tcp_input.c:939
...
rosną = div_u64(((u64)rcvwin << 1) * (nowa - stara wartość), stara wartość);
Dzielenie wykorzystuje oldval = tp->rcvq_space.space jako dzielnik.
Gdy tp->rcvq_space.space wynosi zero, prowadzi to do dzielenia przez zero
wyjątek.
tp->rcvq_space.space jest inicjowany w tcp_init_buffer_space():
tp->rcvq_space.space = min3(tp->rcv_ssthresh, tp->rcv_wnd,
(u32)TCP_INIT_CWND * tp->advmss);
Jeśli tcp_rmem[1] jest skonfigurowany na bardzo małe wartości (takie jak 1),
sk->sk_rcvbuf jest inicjowany na 1. Następnie tcp_full_space(sk), co
oblicza (sk->sk_rcvbuf * scaling_ratio) >> 8, obcina do 0.
To ustawia tp->window_clamp = 0, tp->rcv_ssthresh = 0 i
tp->rcvq_space.space = 0. Później, gdy nadejdą dane i zostanie wywołany DRS,
tcp_rcvbuf_grow() dzieli przez oldval == 0.
W 2015 roku zatwierdź b1cb59cf2efe („net: sysctl_net_core: sprawdź SNDBUF
i RCVBUF dla minimalnej długości”) zapewniły, że net.core.rmem_default i
net.core.rmem_max nie może być ustawiony poniżej SOCK_MIN_RCVBUF. Podobnie,
SO_RCVBUF setsockopt wymusza max_t(int, val * 2, SOCK_MIN_RCVBUF).
Jednak net.ipv4.tcp_rmem nadal miał .extra1 = SYSCTL_ONE, umożliwiając
dowolnie małe wartości.
Ponieważ SOCK_MIN_RCVBUF zależy od sizeof(struct sk_buff) i cacheline
wyrównanie, jego wartość różni się w zależności od architektury i opcji konfiguracji.
Użycie stałej stałej wynoszącej 4096 zapewnia przewidywalną architekturę
niezależna dolna granica, która wszędzie bezpiecznie przekracza SOCK_MIN_RCVBUF
i odpowiada udokumentowanej domyślnej rozdzielczości 4K.
Napraw ten problem, ustawiając tcp_rmem.extra1 na 4096 i aktualizując dokumentację.
>_ Referencje
- https://git.kernel.org/stable/c/1c4bb940c3bb4325bb88ac1b7eaf5faaa39e7d63
- https://git.kernel.org/stable/c/60df201dbb19a1bf6478b56d100f7ae1fe90e46a
- https://git.kernel.org/stable/c/67b83c15bed9eeeb8d1a6dbf88a5f79525970173
- https://git.kernel.org/stable/c/7898bda1ebc198f5559b301a96dd5398edd4d4d3
- https://git.kernel.org/stable/c/83a945a529d6e002dd7339c532288a931f463dba
- https://git.kernel.org/stable/c/879907631b9e70eedb62d76461b29afa106ebe7a
- https://git.kernel.org/stable/c/8e32532d0fa3191ecf9524b0e6bafa0832e712ba
- https://git.kernel.org/stable/c/9a4f49bf8d2da4e52e904f60c29cca317bab9b3a
Dane podatności pochodzą z oficjalnych źródeł (CVE® List / NVD). Opisy po polsku są tłumaczone automatycznie i mogą zawierać nieścisłości – na stronie rekordu można wyświetlić wersję angielską.
This product uses the NVD API but is not endorsed or certified by the NVD.
Copyright © 1999–2026, The MITRE Corporation. CVE is a registered trademark and the CVE logo is a registered trademark of The MITRE Corporation.
CVE Usage: MITRE hereby grants you a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Common Vulnerabilities and Exposures (CVE®). Any copy you make for such purposes is authorized provided that you reproduce MITRE's copyright designation and this license in any such copy. ALL DOCUMENTS AND THE INFORMATION CONTAINED THEREIN PROVIDED BY MITRE ARE PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND.
NVD Terms of Use / CVE® Terms of Use / nvd.nist.gov / cve.org