UBUNTU-CVE-2026-80798: Medium severity ubuntu/linux vulnerability
In the Linux kernel, the following vulnerability has been resolved: nfc: llcp: reject PDUs shorter than the LLCP header Every LLCP PDU begins with a two-byte header (DSAP/SSAP + PTYPE), but the receive path never checked that a frame is at least LLCPHEADERSIZE bytes before parsing it. nfcllcprxskb() reads the header via nfcllcpptype()/nfcllcpdsap()/ nfcllcpssap(), which dereference pdu->data[0] and pdu->data[1], and a CONNECT or CC PDU then computes tlvarraylen = skb->len - LLCPHEADERSIZE; as a sizet and hands it to the TLV walk. When the frame is shorter than the header the subtraction wraps to a huge value and the walk runs far past the buffer, an out-of-bounds read. A nearby NFC device can reach this without authentication; LLCP link activation happens automatically after NFC-DEP. Guard the common receive choke point nfcllcprecv(), shared by both the target (nfcllcpdatareceived()) and initiator (nfcllcprecv()) paths, so a short skb is dropped before the rxwork worker parses it. Use pskbmaypull() rather than a skb->len test so the two header bytes are guaranteed to sit in the skb linear area even for a non-linear skb, matching how the sibling NCI and HCI receive paths validate their headers. Reproduced with a KFENCE out-of-bounds read via /dev/virtualnci on linux-next. Found by 0sec automated security-research tooling (https://0sec.ai).
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Compensating control
In __nfc_llcp_recv(), use pskb_may_pull() to require at least LLCP_HEADER_SIZE bytes in the skb linear area, and drop shorter frames before the rx_work worker parses them.