All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-cve-announce@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@kernel.org>
Subject: CVE-2026-98581: nfc: llcp: Fix list corruption / refcount desync in nfc_llcp_recv_dm()
Date: Sun, 18 Oct 2026 17:17:25 +0200	[thread overview]
Message-ID: <2026101834-CVE-2026-98581-ecae@gregkh> (raw)

From: Greg Kroah-Hartman <gregkh@kernel.org>

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.

The Linux kernel CVE team has assigned CVE-2026-98581 to this issue.


Affected and fixed versions
===========================

	Issue introduced in 3.6 with commit a69f32af86e389dd232b1bb2269e202c1bfcc60f and fixed in 5.10.271 with commit dd2d24add86b3b63cd87cf2feff98ae119ba19a6
	Issue introduced in 3.6 with commit a69f32af86e389dd232b1bb2269e202c1bfcc60f and fixed in 5.15.222 with commit 812731dd8511f5768f4ff279b3c18d85cd21da4b
	Issue introduced in 3.6 with commit a69f32af86e389dd232b1bb2269e202c1bfcc60f and fixed in 6.1.189 with commit dba1d9c7134afcb4b1bfad8c1b1b3f0ab5189b08
	Issue introduced in 3.6 with commit a69f32af86e389dd232b1bb2269e202c1bfcc60f and fixed in 6.6.158 with commit c1e9ed52a6697354366dddf190fbacee8ed2f7c5
	Issue introduced in 3.6 with commit a69f32af86e389dd232b1bb2269e202c1bfcc60f and fixed in 6.12.112 with commit 7fb2c0eeb79bfad64065f539a453138abd0edda6
	Issue introduced in 3.6 with commit a69f32af86e389dd232b1bb2269e202c1bfcc60f and fixed in 6.18.55 with commit b94cf09720543cc34256c7aa88f8059cbe7c0419
	Issue introduced in 3.6 with commit a69f32af86e389dd232b1bb2269e202c1bfcc60f and fixed in 7.2.9 with commit 320a2ff49bdce3f9a437b9a9ff341ff27d3bdbf1
	Issue introduced in 3.6 with commit a69f32af86e389dd232b1bb2269e202c1bfcc60f and fixed in 7.3-rc5 with commit bf1460acdf8cf5a07c819f59785d40f20d113099

Please see https://www.kernel.org for a full list of currently supported
kernel versions by the kernel community.

Unaffected versions might change over time as fixes are backported to
older supported kernel versions.  The official CVE entry at
	https://cve.org/CVERecord/?id=CVE-2026-98581
will be updated if fixes are backported, please check that for the most
up to date information about this issue.


Affected files
==============

The file(s) affected by this issue are:
	net/nfc/llcp_core.c


Mitigation
==========

The Linux kernel CVE team recommends that you update to the latest
stable kernel version for this, and many other bugfixes.  Individual
changes are never tested alone, but rather are part of a larger kernel
release.  Cherry-picking individual commits is not recommended or
supported by the Linux kernel community at all.  If however, updating to
the latest release is impossible, the individual changes to resolve this
issue can be found at these commits:
	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

                 reply	other threads:[~2026-10-18 15:34 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2026101834-CVE-2026-98581-ecae@gregkh \
    --to=gregkh@linuxfoundation.org \
    --cc=cve@kernel.org \
    --cc=gregkh@kernel.org \
    --cc=linux-cve-announce@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.