CVE-2026-98581
Last modified
CVE-2026-98581 is a vulnerability of currently unknown severity. In the Linux kernel, the following vulnerability has been resolved: nfc: llcp: Fix list corruption / refcount desync in nfc_llcp_recv_dm() nfc_llcp_recv_dm() handles DM(NOBOUND)/DM(REJ) for a socket that is still linked on local->connecting_sockets: it looks the socket up with nfc_llcp_connecting_sock_get(), sets sk->sk_state = LLCP_CLOSED and returns, without taking the socket lock and without unlinking the socket from the connecting_sockets list. llcp_sock_release() selects the list to unlink from by sk_state: a socket in LLCP_CONNECTING is unlinked from connecting_sockets, otherwise from the sockets list. Because recv_dm left the socket physically on connecting_sockets but in the LLCP_CLOSED state, release() takes the else branch and calls nfc_llcp_sock_unlink(&local->sockets, sk).
Description
In the Linux kernel, the following vulnerability has been resolved: nfc: llcp: Fix list corruption / refcount desync in nfc_llcp_recv_dm() nfc_llcp_recv_dm() handles DM(NOBOUND)/DM(REJ) for a socket that is still linked on local->connecting_sockets: it looks the socket up with nfc_llcp_connecting_sock_get(), sets sk->sk_state = LLCP_CLOSED and returns, without taking the socket lock and without unlinking the socket from the connecting_sockets list. llcp_sock_release() selects the list to unlink from by sk_state: a socket in LLCP_CONNECTING is unlinked from connecting_sockets, otherwise from the sockets list. Because recv_dm left the socket physically on connecting_sockets but in the LLCP_CLOSED state, release() takes the else branch and calls nfc_llcp_sock_unlink(&local->sockets, sk). That runs sk_del_node_init() while holding sockets.lock, i.e. it removes the socket from the connecting_sockets hlist under the wrong lock. A concurrent connect() linking another socket onto connecting_sockets under connecting_sockets.lock then mutates the same hlist unserialized, which corrupts the list and desyncs the sk_add_node()/sk_del_node_init() sock_hold()/__sock_put() pairing. An unprivileged local process holding LLCP sockets, with the DM supplied by the remote peer over an established LLCP link, can drive this to leak kernel sockets without bound (the mis-decrement goes through the non-freeing __sock_put() path, so the object is never released), leading to memory exhaustion / DoS. This is the same class of bug that was fixed in the sibling handler nfc_llcp_recv_cc() by commit b493ea2765cc ("nfc: llcp: Fix use-after-free race in nfc_llcp_recv_cc()"); recv_dm did not receive the equivalent fix. Fix it the same way: take lock_sock(), re-check that the socket is still hashed (release() may have won the race), and for the NOBOUND/REJ case unlink it from connecting_sockets before moving it to LLCP_CLOSED. The unlink drops the connecting_sockets membership reference via sk_del_node_init(), leaving the socket unhashed, so the later nfc_llcp_sock_unlink() in llcp_sock_release() becomes a no-op and no double put occurs.
Affected Software
Source: CNA advisory (CVE.org). NVD analysis pending.
| Vendor | Product | Versions |
|---|---|---|
| Linux | Linux | >= a69f32af86e389dd232b1bb2269e202c1bfcc60f, < dd2d24add86b3b63cd87cf2feff98ae119ba19a6; >= a69f32af86e389dd232b1bb2269e202c1bfcc60f, < 812731dd8511f5768f4ff279b3c18d85cd21da4b; >= a69f32af86e389dd232b1bb2269e202c1bfcc60f, < dba1d9c7134afcb4b1bfad8c1b1b3f0ab5189b08; >= a69f32af86e389dd232b1bb2269e202c1bfcc60f, < c1e9ed52a6697354366dddf190fbacee8ed2f7c5; >= a69f32af86e389dd232b1bb2269e202c1bfcc60f, < 7fb2c0eeb79bfad64065f539a453138abd0edda6; >= a69f32af86e389dd232b1bb2269e202c1bfcc60f, < b94cf09720543cc34256c7aa88f8059cbe7c0419; >= a69f32af86e389dd232b1bb2269e202c1bfcc60f, < 320a2ff49bdce3f9a437b9a9ff341ff27d3bdbf1; >= a69f32af86e389dd232b1bb2269e202c1bfcc60f, < bf1460acdf8cf5a07c819f59785d40f20d113099 |
| Linux | Linux | 3.6 |
References
Timeline
- Published
- Last Modified
- Status
- Received
Frequently Asked Questions
What is CVE-2026-98581?
How severe is CVE-2026-98581?
How do I fix CVE-2026-98581?
How Strix Helps
- How Strix found a critical auth bypass in etcdStrix autonomously discovered a critical authentication bypass in etcd, later designated CVE-2026-33413.
- Autonomous PentestingAI agents that find and validate exploitable vulnerabilities like this one across your applications.
- PR ReviewsPentest every pull request so vulnerable code is caught before it ships to production.
- AI Penetration TestingHow AI-driven penetration testing continuously covers your attack surface.
Related CVEs from 2026
- CVE-2026-98576In the Linux kernel, the following vulnerability has been re…
- CVE-2026-98577In the Linux kernel, the following vulnerability has been re…
- CVE-2026-98578In the Linux kernel, the following vulnerability has been re…
- CVE-2026-98579In the Linux kernel, the following vulnerability has been re…
- CVE-2026-9858The Partial Shipment for Woocommerce plugin for WordPress is…4.3
- CVE-2026-98580In the Linux kernel, the following vulnerability has been re…
- CVE-2026-98582In the Linux kernel, the following vulnerability has been re…
- CVE-2026-98583In the Linux kernel, the following vulnerability has been re…
- CVE-2026-98584In the Linux kernel, the following vulnerability has been re…
- CVE-2026-98585In the Linux kernel, the following vulnerability has been re…
- CVE-2026-98586In the Linux kernel, the following vulnerability has been re…
- CVE-2026-98587In the Linux kernel, the following vulnerability has been re…
Are you affected by CVE-2026-98581?
Run a free Strix scan to check your systems for this vulnerability.
Scan your code nowSource: NVD / NIST
