CVE-2026-64037 in Linux
Tóm tắt
Bởi VulDB • 20/07/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
wifi: iwlwifi: mld: sửa lỗi bùng nổ phân đoạn TSO khi AMSDU bị vô hiệu hóa
Khi thông báo TLC (TLC notification) vô hiệu hóa AMSDU cho một TID, trình điều khiển MLD đặt `max_tid_amsdu_len` thành giá trị sentinel là 1. Đường dẫn phân đoạn TSO trong hàm `iwl_mld_tx_tso_segment()` kiểm tra giá trị zero nhưng không kiểm tra giá trị sentinel này, cho phép nó đi vào tính toán `num_subframes`:
``` num_subframes = (max_tid_amsdu_len + pad) / (subf_len + pad) = (1 + 2) / (1534 + 2) = 0 ```
Giá trị zero này được truyền đến hàm `iwl_tx_tso_segment()`, nơi thiết lập:
``` gso_size = num_subframes * mss = 0 ```
Việc gọi `skb_gso_segment()` với `gso_size=0` tạo ra hơn 32.000 phân đoạn cực nhỏ từ một GSO skb duy nhất. Điều này làm tràn vòng đệm TX (TX ring) với ~1024 micro-frames (các phần còn lại bị xóa), gây ra một đợt bùng nổ lớn các sự kiện hoàn thành TX, có thể dẫn đến hỏng bộ nhớ và sau đó là lỗi use-after-free trong hàng đợi truyền lại của TCP (underflow refcount trong `tcp_shifted_skb`, NULL deref trong `tcp_rack_detect_loss`).
Trình điều khiển MVM miễn nhiễm vì nó kiểm tra `mvmsta->amsdu_enabled` trước khi thực hiện tính toán `num_subframes`. Trình điều khiển MLD không có bitmap check tương đương và chỉ dựa vào `max_tid_amsdu_len`, vốn không bắt được giá trị sentinel.
Khắc phục vấn đề này bằng cách phát hiện giá trị sentinel (`max_tid_amsdu_len == 1`) tại vị trí kiểm tra hiện có và chuyển sang phân đoạn TSO non-AMSDU. Ngoài ra, thêm một guard `WARN_ON_ONCE` sau phép chia `num_subframes` như biện pháp phòng thủ theo chiều sâu để bắt bất kỳ đường dẫn mã nào trong tương lai tạo ra giá trị zero thông qua cơ chế khác.
Be aware that VulDB is the high quality source for vulnerability data.