Android security tags, read closely by Lightrion

CVE-2025-48539 AI-generated analysis

platform/packages/modules/Bluetooth, system/stack/arbiter (ACL arbiter that sends Rust-supplied packets on the L2CAP ATT fixed channel)

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 (2 corrections). Verify against the commit before relying on it.

In AclArbiter::SendPacketToPeer (system/stack/arbiter/acl_arbiter.cc), the failure-path warning log now reads the length from the rust::Vec argument (buffer.size()) instead of from the BT_HDR p_buf, which L2CA_SendFixedChnlData may already have freed.

Root cause

AclArbiter::SendPacketToPeer allocates a BT_HDR p_buf with osi_malloc, copies the Rust-supplied bytes into it, and passes it to L2CA_SendFixedChnlData(L2CAP_ATT_CID, p_tcb->peer_bda, p_buf). According to the commit message, this intermediate call may free the buffer. When the call does not return L2CAP_DW_SUCCESS, the original code then read p_buf->len inside log::warn, which could read freed memory.

How the fix works

Completeness

Behavior changes

Per major

Unknowns

Back to September 2025 · Findings