CVE-2026-80800
NoneCVSS
—
EPSS
0.2%
Published
Sep 4, 2026
CISA due date
—
Cloudanix analysis
A nearby device could send specially crafted wireless messages that crash the system or let it read memory it should not access.
- Exploitation
- Adjacent Network
- Attacker needs
- None
- Complexity
- Low
- Impact
- Data Exposure
- Component
- OS kernel
- Class
- Buffer Overflow
- Remediation
- Patch
- Effort
- Medium
- Patch risk
- Low
What it actually does
Unbounded TLV walk in nfc_llcp_connect_sn() reads two-byte headers and declared-length values without skb bounds checks, returning a pointer that may exceed skb_tail_pointer; subsequent memcmp in nfc_llcp_sock_from_sn can read past the end of the buffer. Short CONNECT/CC frames also trigger size_t underflow of tlv_array_len.
Why it matters to the business
Systems exposing the NFC LLCP stack to nearby devices risk kernel crashes or limited information disclosure; impact is highest on NFC-enabled Linux devices in IoT, mobile, or automotive environments where physical proximity attacks are feasible.
How an attack unfolds
An attacker brings an NFC device within range, allows automatic LLCP link activation after NFC-DEP, then transmits a crafted CONNECT or CC PDU containing malformed TLVs. The nfc_llcp_recv_connect / nfc_llcp_recv_cc path calls the unbounded parser, causing out-of-bounds memory access during TLV processing.
How to fix it
Apply the upstream fix that replaces the pointer walk with iteration bounded by skb_tail_pointer(skb) and validates every TLV length before use; rebuild and deploy the patched kernel on all affected systems.
How to confirm the fix worked
Confirm the patched nfc_llcp_connect_sn implementation starts the walk at &skb->data[LLCP_HEADER_SIZE] and checks each declared length against skb_tail_pointer before dereference; recompile and boot-test the kernel.
Typical attack path
- Position NFC-capable device within radio range of target
- Trigger NFC-DEP link activation (automatic)
- Transmit CONNECT or CC PDU with short or oversized TLV fields
- nfc_llcp_rx_skb dispatches to nfc_llcp_connect_sn without length guard
- Unbounded walk produces pointer past skb end; memcmp triggers oops or leak
How to detect it
Inspect kernel logs for oops/panic entries referencing nfc_llcp_connect_sn, nfc_llcp_sock_from_sn, or LLCP TLV parsing; correlate with unusual short or malformed NFC LLCP frames captured on the wire.
What your security team should do
- Disable NFC kernel modules (CONFIG_NFC, CONFIG_NFC_LLCP) on systems that do not require the feature
- Prioritize kernel updates containing the skb-bounded TLV parser for any device with NFC hardware
- Add kernel oops and NFC LLCP packet-length alerts to monitoring pipelines
- Review downstream device images for inclusion of the vulnerable NFC LLCP code
The record
In the Linux kernel, the following vulnerability has been resolved: nfc: llcp: bound the connect_sn TLV walk to the skb Commit 27256cdb290e ("nfc: llcp: bound SNL TLV parsing to the skb and add length checks") fixed the unbounded TLV walk in nfc_llcp_recv_snl(), and commit d8bd2dedbde5 ("nfc: llcp: fix OOB read and u8 offset wrap in TLV parsers") subsequently bounded nfc_llcp_parse_gb_tlv() and nfc_llcp_parse_connection_tlv(). One sibling parser sharing the same pattern remains unbounded: nfc_llcp_connect_sn(). nfc_llcp_connect_sn() walks a TLV list, reading a two-byte header (type, length) followed by length bytes of value, without checking that the two header bytes or the declared length stay within the buffer. It returns a pointer to a service name of up to 255 bytes that may point past the end of the skb; it is subsequently consumed by memcmp() in nfc_llcp_sock_from_sn(). In addition tlv_array_len was computed as "skb->len - LLCP_HEADER_SIZE" in size_t, so a CONNECT/CC frame shorter than the LLCP header underflows to a huge length and the walk runs far past the buffer. nfc_llcp_connect_sn() is reachable from nfc_llcp_recv_connect() and nfc_llcp_recv_cc(), i.e. from received CONNECT and CC PDUs. A nearby NFC device can reach this without authentication; LLCP link activation happens automatically after NFC-DEP, and the nfc_llcp_rx_skb() dispatcher applies no minimum-length guard. Walk the TLV list by pointer, bounded by skb_tail_pointer(skb), and validate each declared length before use, matching the approach already used for nfc_llcp_recv_snl(). Starting the walk at &skb->data[LLCP_HEADER_SIZE] against the tail pointer also removes the size_t underflow for short frames. Found by 0sec automated security-research tooling (https://0sec.ai).
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|