CVE-2026-98299 in Linuxthông tin

Tóm tắt

Bởi VulDB • 06/10/2026

Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:

tcp: không cho phép tcp_rmem bị đặt xuống dưới mức 4096

Chúng ta có thể gặp phải lỗi crash do chia cho số 0 (division by zero) trong các hàm `tcp_rcvbuf_grow()` và `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);

Phép chia sử dụng `oldval = tp->rcvq_space.space` làm số bị chia. Khi `tp->rcvq_space.space` bằng không, điều này dẫn đến ngoại lệ chia cho số 0.

`tp->rcvq_space.space` được khởi tạo trong hàm `tcp_init_buffer_space()`: tp->rcvq_space.space = min3(tp->rcv_ssthresh, tp->rcv_wnd, (u32)TCP_INIT_CWND * tp->advmss);

Nếu `tcp_rmem[1]` được cấu hình với các giá trị rất nhỏ (chẳng hạn như 1), thì `sk->sk_rcvbuf` sẽ được khởi tạo thành 1. Sau đó, hàm `tcp_full_space(sk)`, vốn tính toán `(sk->sk_rcvbuf * scaling_ratio) >> 8`, bị cắt xuống còn 0. Điều này thiết lập `tp->window_clamp = 0`, `tp->rcv_ssthresh = 0` và `tp->rcvq_space.space = 0`. Sau đó, khi dữ liệu đến và DRS được kích hoạt, hàm `tcp_rcvbuf_grow()` thực hiện phép chia cho `oldval == 0`.

Vào năm 2015, commit b1cb59cf2efe ("net: sysctl_net_core: check SNDBUF and RCVBUF for min length") đã đảm bảo rằng `net.core.rmem_default` và `net.core.rmem_max` không thể được đặt dưới mức `SOCK_MIN_RCVBUF`. Tương tự, lệnh gọi hệ thống (sysctl) SO_RCVBUF cũng thực thi `max_t(int, val * 2, SOCK_MIN_RCVBUF)`.

Tuy nhiên, `net.ipv4.tcp_rmem` vẫn có `.extra1 = SYSCTL_ONE`, cho phép các giá trị nhỏ tùy ý.

Bởi vì `SOCK_MIN_RCVBUF` phụ thuộc vào kích thước của `struct sk_buff` và sự căn chỉnh bộ nhớ đệm (cacheline alignment), nên giá trị của nó thay đổi giữa các kiến trúc khác nhau và các tùy chọn cấu hình. Việc sử dụng một hằng số cố định là 4096 đảm bảo một ngưỡng dưới có thể dự đoán được, độc lập với kiến trúc, an toàn hơn `SOCK_MIN_RCVBUF` ở mọi nơi và khớp với mức mặc định 4K đã được tài liệu hóa.

Khắc phục vấn đề này bằng cách đặt `tcp_rmem.extra1` thành 4096 và cập nhật tài liệu.

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

chịu trách nhiệm

Linux

Đặt trước

25/09/2026

Tiết lộ

06/10/2026

Kiểm duyệt

được chấp nhận

EPSS

0.00000

KEV

không

Các hoạt động

rất thấp

Nguồn

Might our Artificial Intelligence support you?

Check our Alexa App!