CVE-2026-64025 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:
bpf, skmsg: sửa lỗi race condition giữa verdict và ktls rx trong hàm sk_data_ready
Hàm `sk_psock_strp_data_ready()` hiện đã kiểm tra `tls_sw_has_ctx_rx()` và chuyển hướng đến `psock->saved_data_ready` khi có ngữ cảnh TLS RX tồn tại, nhằm tránh xung đột với quyền sở hữu hàng đợi nhận (receive queue) của strparser TLS (commit e91de6afa81c, "bpf: Fix running sk_skb program types with ktls").
Tuy nhiên, `sk_psock_verdict_data_ready()` không có cơ chế bảo vệ tương đương. Khi một socket được chèn vào sockmap (`BPF_SK_SKB_VERDICT`) trước khi TLS RX được cấu hình, `tls_sw_strparser_arm()` lưu trữ `sk_psock_verdict_data_ready` dưới dạng `rx_ctx->saved_data_ready`. Khi dữ liệu đến:
tls_data_ready -> tls_strp_data_ready -> tls_rx_msg_ready -> saved_data_ready() = sk_psock_verdict_data_ready() -> tcp_read_skb() giải phóng sk_receive_queue thông qua __skb_unlink() mà không gọi tcp_eat_skb(), do đó copied_seq không được tăng lên.
Sau đó, `tls_strp_msg_load()` phát hiện thấy `tcp_inq() >= full_len` (dữ liệu cũ/stale), gọi `tcp_recv_skb()` trên hàng đợi giờ đã trống, gặp phải cảnh báo `WARN_ON_ONCE(!first)`, và trả về với con trỏ `rx_ctx->strp.anchor.frag_list` đang chỉ đến một skb thuộc sở hữu của psock (có thể đã bị giải phóng). Hàm `tls_decrypt_sg()` sau đó sẽ duyệt qua frag_list này: lỗi use-after-free.
Áp dụng cùng biện pháp khắc phục như trong `sk_psock_strp_data_ready()`: nếu có ngữ cảnh TLS RX tồn tại, hãy gọi `psock->saved_data_ready` (`sock_def_readable`) để đánh thức các trình chờ recv() và trả về ngay lập tức, giữ nguyên hàng đợi nhận không bị thay đổi. TLS duy trì quyền sở hữu độc nhất đối với hàng đợi này và giải mã bản ghi một cách bình thường thông qua `tls_sw_recvmsg()`.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.