Android security tags, read closely by Lightrion

CVE-2024-43763 AI-generated analysis

platform/packages/modules/Bluetooth, GATT server (system/stack/gatt/gatt_sr.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 (3 corrections). Verify against the commit before relying on it.

Changes the early-exit condition in build_read_multi_rsp (system/stack/gatt/gatt_sr.cc) so a zero-length attribute value is encoded into the GATT Read Multiple (Variable) response instead of terminating the response builder and producing a truncated or empty packet.

Root cause

In build_read_multi_rsp, for each requested handle the code computes len = std::min(p_rsp->attr_value.len, mtu - total_len) and then did `if (len == 0) break;` with a "Buffer space not enough" log. That condition mixes up two cases: the buffer really being full (mtu - total_len == 0) and the attribute simply having a zero-length value (attr_value.len == 0). A zero-length value is valid and, in variable-length mode, should still add its 2-byte length field (value 0) to the packet. Because the loop broke out instead, the response stopped at the first zero-length value. If the first characteristic had length 0, the commit message says an empty packet was returned (p_buf->len starts at 1, the opcode byte).

How the fix works

Completeness

Behavior changes

Per major

Unknowns

Back to January 2025 · Findings