UBUNTU-CVE-2026-98483: Use After Free
In the Linux kernel, the following vulnerability has been resolved: nfc: fix use-after-free in nfcgetlocalgeneralbytes Commit 6709d4b7bc2e ("net: nfc: Fix use-after-free caused by nfcllcpfindlocal") attempted to fix a use-after-free (UAF) issue by invoking nfcllcplocalput(local) after accessing local->gb. However, if the reference count drops to zero, local is freed immediately, leading to a use-after-free when callers access the returned pointer. Alternative approaches using dynamic allocation (e.g. kmemdup) introduced memory leaks because callers consistently treat the returned pointer as borrowed memory. Fix this properly by refactoring nfcllcpgeneralbytes() and nfcgetlocalgeneralbytes() to accept a caller-provided output buffer (outgb) and its maximum length (gbmaxlen). The general bytes are safely copied into outgb before calling nfcllcplocalput(local), ensuring safe lifetime management without ownership transfer complications. Update all callers across drivers (microread, pn533, pn544, st21nfca, digitaldep, and nci) to provide their own destination buffers and pass them to nfcgetlocalgeneralbytes().
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Compensating control
Refactor nfc_llcp_general_bytes() and nfc_get_local_general_bytes() to accept a caller-provided output buffer (out_gb) and maximum length (gb_max_len); copy the general bytes into out_gb before calling nfc_llcp_local_put(local), and update the microread, pn533, pn544, st21nfca, digital_dep, and nci callers to provide destination buffers. Do not use kmemdup() for the returned data, since callers treat it as borrowed memory and this causes leaks.