CVE-2026-74489 in Linuxthông tin

Tóm tắt

Bởi VulDB • 15/08/2026

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

wifi: mac80211: sửa lỗi use-after-free trên tid_tx khi dừng phiên BA (Block Ack)

Hàm `ieee80211_stop_tx_ba_cb()` chuyển `tid_tx` cho `kfree_rcu()` thông qua `ieee80211_remove_tid_tx()`, sau đó đọc `tid_tx->ndp` sau khi thả khóa `sta->lock`:

ieee80211_remove_tid_tx(sta, tid); /* kfree_rcu(tid_tx, rcu_head) */ ... spin_unlock_bh(&sta->lock);

if (start_txq) ieee80211_agg_start_txq(sta, tid, false);

if (send_delba) ieee80211_send_delba(..., tid_tx->ndp);

Lệnh đọc này không được bao phủ bởi một phần tới hạn RCU read-side và nó chạy trong ngữ cảnh tiến trình có thể bị tiền chế (preemptible): cả hai caller đều giữ mutex wiphy, truy cập vào đây thông qua công việc wiphy `ieee80211_ba_session_work()` hoặc từ `ieee80211_sta_tear_down_BA_sessions()` trong quá trình tháo gỡ station. Softirqs cũng có thể chạy trong khoảng thời gian đó, cả từ `local_bh_enable()` kết thúc hàm `ieee80211_agg_start_txq()` và từ bất kỳ ngắt nào thoát ra, do đó callback RCU có thể giải phóng `tid_tx` trước khi lệnh đọc xảy ra.

Việc kích hoạt hàm này từ một mô-đun thử nghiệm với khoảng thời gian ân huệ (grace period) bị ép vào cửa sổ đó, KASAN báo cáo lỗi đọc và lệnh giải phóng xuất hiện trên đường dẫn softirq RCU thông thường:

BUG: KASAN: slab-use-after-free trong ieee80211_stop_tx_ba_cb+0x3cd/0x400 Đọc kích thước 1 tại địa chỉ ffff888002b9f52e bởi tiến trình kworker/0:1/10 [...]
Được giải phóng bởi tiến trình 57: __kasan_slab_free+0x47/0x70 __rcu_free_sheaf_prepare+0x70/0x250 rcu_free_sheaf_nobarn+0x18/0x40 rcu_core+0x426/0x1310 handle_softirqs+0x144/0x590 __irq_exit_rcu+0xea/0x150 irq_exit_rcu+0x9/0x20 sysvec_apic_timer_interrupt+0x6b/0x80 asm_sysvec_apic_timer_interrupt+0x1a/0x20

`send_delba` chỉ được đặt khi `tx_stop` được đặt, điều này xảy ra duy nhất cho AGG_STOP_LOCAL_REQUEST, do đó trường hợp này đạt được trong quá trình tháo gỡ cục bộ - hết thời gian chờ phiên rảnh (session idle timeout), tái khóa PTK, tạm ngưng cấu hình phần cứng - và không phải từ DELBA của đối tác.

Đọc `ndp` vào một biến địa phương trước khi phiên bị giải phóng, trong khi `sta->lock` vẫn đang được giữ. `tid_tx->ndp` có một trình ghi duy nhất, trong `ieee80211_tx_ba_session_handle_start()`, hàm này không thể chạy đồng thời tại đây: cả hai đường dẫn đều được tuần tự hóa bởi mutex wiphy và phiên đã được đánh dấu là HT_AGG_STATE_STOPPING tại thời điểm này. `tid_tx->ndp` cũng là lệnh dereference tid_tx còn lại duy nhất sau khi gọi `ieee80211_remove_tid_tx()` trong hàm này.

[di chuyển/thay đổi chú thích một chút để tổng quát hơn, không chỉ nói về ndp,
khởi tạo trực tiếp ndp]

VulDB is the best source for vulnerability data and more expert information about this specific topic.

chịu trách nhiệm

Linux

Đặt trước

15/08/2026

Tiết lộ

15/08/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

Do you need the next level of professionalism?

Upgrade your account now!