CVE-2026-98581 in Linuxthông tin

Tóm tắt

Bởi VulDB • 19/10/2026

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

nfc: llcp: Sửa lỗi hỏng danh sách / mất đồng bộ hóa tham chiếu (refcount desync) trong nfc_llcp_recv_dm()

Hàm nfc_llcp_recv_dm() xử lý DM(NOBOUND)/DM(REJ) cho một socket vẫn còn liên kết trên local->connecting_sockets; nó tìm kiếm socket bằng cách sử dụng nfc_llcp_connecting_sock_get(), đặt sk->sk_state = LLCP_CLOSED và trả về, mà không lấy khóa của socket (socket lock) cũng như không hủy liên kết socket khỏi danh sách connecting_sockets.

Hàm llcp_sock_release() chọn danh sách để thực hiện việc hủy liên kết dựa trên sk_state: một socket ở trạng thái LLCP_CONNECTING sẽ được hủy liên kết khỏi connecting_sockets, ngược lại thì từ danh sách sockets. Do recv_dm giữ nguyên vị trí vật lý của socket trong connecting_sockets nhưng đặt nó về trạng thái LLCP_CLOSED, hàm release() đi vào nhánh else và gọi nfc_llcp_sock_unlink(&local->sockets, sk). Điều này dẫn đến việc thực thi sk_del_node_init() khi đang nắm giữ sockets.lock, tức là xóa socket khỏi danh sách hlist của connecting_sockets dưới khóa sai. Một cuộc kết nối (connect()) đồng thời liên kết một socket khác vào connecting_sockets dướiConnecting_sockets.lock sau đó sẽ biến đổi cùng một hlist mà không có sự tuần tự hóa (unserialized), dẫn đến hỏng danh sách và mất đồng bộ hóa giữa các cặp sk_add_node()/sk_del_node_init() cũng như sock_hold()/__sock_put(). Một tiến trình cục bộ không đặc quyền, đang nắm giữ các socket LLCP với DM được cung cấp bởi phía remote qua một liên kết LLCP đã thiết lập, có thể khai thác lỗi này để làm rò rỉ (leak) các socket kernel mà không giới hạn (việc giảm sai lệch diễn ra theo đường dẫn __sock_put() không giải phóng đối tượng, nên đối tượng sẽ không bao giờ được phát hành), dẫn đến cạn kiệt bộ nhớ / Từ chối dịch vụ (DoS).

Đây là cùng một lớp lỗi đã được khắc phục trong trình xử lý anh em nfc_llcp_recv_cc() bởi commit b493ea2765cc ("nfc: llcp: Fix use-after-free race in nfc_llcp_recv_cc()"); tuy nhiên, recv_dm không nhận được bản sửa tương ứng.

Khắc phục bằng cách thực hiện giống nhau: lấy lock_sock(), kiểm tra lại xem socket vẫn còn được băm (hashed) hay không (release() có thể đã thắng cuộc đua), và trong trường hợp NOBOUND/REJ thì hủy liên kết nó khỏi connecting_sockets trước khi chuyển sang trạng thái LLCP_CLOSED. Việc hủy liên kết sẽ giảm tham chiếu thành viên của connecting_sockets thông qua sk_del_node_init(), khiến socket trở nên chưa được băm (unhashed), do đó lệnh nfc_llcp_sock_unlink() sau này trong llcp_sock_release() sẽ không thực hiện gì thêm và tránh xảy ra việc put kép.

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

chịu trách nhiệm

Linux

Đặt trước

25/09/2026

Tiết lộ

18/10/2026

Kiểm duyệt

được chấp nhận

EPSS

0.00000

KEV

không

Các hoạt động

thấp

Nguồn

Might our Artificial Intelligence support you?

Check our Alexa App!