Android security tags, read closely by Lightrion

CVE-2026-55280 AI-generated analysis

platform/packages/modules/Nfc, libnfc-nci (NCI interface layer nfc_ncif.cc and NFA device manager nfa_dm_act.cc)

AI-generated: written from the bulletin and the fixing diffs by claude-fable-5-1, then checked against the code by claude-opus-5-5 (10 corrections). Verify against the commit before relying on it.

Zero-initializes the whole evt_data.activate structure in nfc_ncif_proc_activate() and clamps the NFCID1 and Kovio UID length fields in nfa_dm_notify_activation_status(). The goal is that a short or malformed RF_INTF_ACTIVATED_NTF from the NFCC can no longer feed uninitialized or oversized length values into a memcpy in the NFC process.

Root cause

In libnfc-nci/src/nfc/nfc/nfc_ncif.cc, nfc_ncif_proc_activate() declares a stack tNFC_DISCOVER evt_data but cleared only the intf_param sub-structure (memset(p_intf, 0, sizeof(tNFC_INTF_PARAMS))). The rf_tech_param union inside evt_data.activate stayed uninitialized. If the RF_INTF_ACTIVATED_NTF is too short (plen < 7, or plen < *p + 4), the function jumps to invalid_packet before nfc_ncif_decode_rf_params() fills rf_tech_param. Per the unit test ProcActivateInvalidPacketLength (per index search), the discovery callback is still called in that case with NFC_ACTIVATE_DEVT and NCI_STATUS_FAILED. Per the commit message, this uninitialized data is later used as a memcpy length and causes an out-of-bounds write in the NFC process. The fix also adds checks in nfa_dm_notify_activation_status() (libnfc-nci/src/nfa/dm/nfa_dm_act.cc), which reads the activation notification copied from nfa_dm_cb.p_activate_ntf (per index search). Before the fix, that function used the length fields nfcid1_len (POLL_A) and pk.uid_len (POLL_KOVIO) without bounds checks.

How the fix works

Completeness

Behavior changes

Per major

Unknowns

Back to October 2026 · Findings