KernelScan.io

HIGH Introduced in 3.10

nfc SockOpt UAF

CVE-2026-90225

CVSS 7.8 / 10.0 NVD

CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

KernelScan AI7.0HIGH

01

In the Linux kernel, the following vulnerability has been resolved: nfc: llcp: read llcp_sock->local under the socket lock in getsockopt nfc_llcp_getsockopt() read llcp_sock->local before lock_sock(sk) and then dereferenced the cached pointer inside the locked region. llcp_sock_bind() assigns and clears llcp_sock->local under the same socket lock, dropping the last reference on its error path. A getsockopt() racing an in-flight bind() can observe the pointer, block on lock_sock(), and then dereference a freed nfc_llcp_local once bind() has unwound. Move the llcp_sock->local read and the NULL check inside the lock_sock(sk) region so bind() cannot mutate or free the pointer between the load and the use.

02

Engine v0.6.0

Risk summary

A local user with access to NFC LLCP sockets can race a getsockopt call against a bind operation to trigger a use-after-free of an internal NFC local structure. This can lead to kernel memory corruption, potentially enabling privilege escalation or a system crash. An NFC interface must be present for the bind path to assign the vulnerable pointer.

Affectednet/nfc/llcp_sock.c (nfc llcp)

Vulnerability analysis

The getsockopt path for NFC LLCP sockets reads a pointer to the local NFC device structure before acquiring the socket lock, then dereferences that cached pointer after the lock is taken. A concurrent bind operation can set and then clear that same pointer—freeing the underlying object—while getsockopt is waiting for the lock, resulting in a use-after-free when getsockopt proceeds and dereferences the stale pointer. The fix moves the pointer read and NULL check entirely inside the locked region so bind cannot free the object between the load and the use. This is reachable by a local user with access to NFC LLCP sockets, and an NFC interface must be present for the bind path to assign the pointer in the first place.

03

BranchIntroducedFixed inPatch commit
5.103.105.10.27056fd158fef20
6.63.106.6.157fe65727a4a21
6.123.106.12.1102d8ac24565be
7.23.107.2.6d1b73962675c
mainline3.107.3-rc136812527052c
6.183.106.18.52156e65bd2930
5.153.105.15.2218ba8cec05867
6.13.106.1.188ed5240bab346
cip/6.123.106.12.111-cip322d8ac24565be