Android security tags, read closely by Lightrion

CVE-2026-55290 AI-generated analysis

platform/frameworks/base, libs/androidfw (ResStringPool resource string pool parser)

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

ResStringPool::setTo in libandroidfw now checks stringsStart and stylesStart against the chunk size unconditionally. It also checks that the style-offset array (styleCount * 4 bytes) fits inside the data buffer and ends before stringsStart. This closes an out-of-bounds heap read in ResStringPool::styleAt.

Root cause

In libs/androidfw/ResourceTypes.cpp, ResStringPool::setTo skipped validation of stringsStart when stringCount was zero (per the commit message), so stringsStart could hold an arbitrary value such as 0xFFFFFFFF. In the styleCount > 0 path, the old code had three weak checks: 1. It only checked that the start of the style-offset array (mEntryStyles - mHeader) was not past size (an int comparison). It did not check that styleCount * sizeof(uint32_t) bytes fit. 2. The overflow guard only bounded styleCount against the uint32_t maximum / 4. 3. The overlap check `styleCount * sizeof(uint32_t) > (stringsStart - styleOffsetsStart)` did not fire when stringsStart was huge and unvalidated. A pool with stringCount == 0, a large styleCount and a huge stringsStart therefore passed setTo. Per the commit message, this led to an OOB heap read in ResStringPool::styleAt.

How the fix works

Completeness

Behavior changes

Per major

Unknowns

Back to September 2026 · Findings