CVE-2026-98482: nfc: llcp: drop truncated I/RR/RNR PDUs in nfc_llcp_recv_hdlc()
In the Linux kernel, the following vulnerability has been resolved:
nfc: llcp: drop truncated I/RR/RNR PDUs in nfcllcprecvhdlc()
nfcllcprecvhdlc() reads the sequence byte skb->data[2], via nfcllcpns()/nfcllcpnr(), before any length check. The receive path only guarantees the two-byte LLCP header -- nfcllcprecv() checks it with pskbmaypull() and nfcllcprecvagf() admits two-byte inner PDUs -- so a two-byte I, RR or RNR PDU reads one byte of uninitialised skb tailroom. The byte becomes N(R)/N(S); a peer can already set those with a well-formed PDU, so this is acting on uninitialised memory, not new peer control.
Guard the read with pskbmaypull(), as commit 95674f506c63 ("nfc: llcp: reject PDUs shorter than the LLCP header") did for the two-byte header, so the sequence byte is present and linear before it is read. RR and RNR PDUs are LLCPHEADERSIZE + LLCPSEQUENCESIZE bytes and an I PDU is longer, so no valid frame is rejected; a truncated PDU is malformed, so return without a DM reply.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Compensating control
In nfc_llcp_recv_hdlc(), call pskb_may_pull() before reading skb->data[2] and drop truncated I/RR/RNR PDUs by returning without a DM reply; ensure nfc_llcp_recv_agf() does not admit two-byte inner PDUs.