Android security tags, read closely by Lightrion

CVE-2026-0065 AI-generated analysis

platform/frameworks/base, WindowManager / ActivityTaskManager background activity launch (BAL) control

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.

The BAL "bound by foreground UID" exemption in BackgroundLaunchProcessController now requires the binding client UID to have a visible non-pinned (non-PiP) window for activity starts (FGS starts keep the old any-visible-window predicate), and on Android 14/15 additionally requires appSwitchState != APP_SWITCH_DISALLOW unconditionally.

Root cause

BackgroundLaunchProcessController.areBackgroundActivityStartsAllowed() grants BAL_ALLOW_VISIBLE_WINDOW when isBoundByForegroundUid() finds any UID in mBalOptInBoundClientUids (clients bound with BIND_ALLOW_ACTIVITY_STARTS, per the tests) for which mUidHasActiveVisibleWindowPredicate is true. That predicate is ActivityTaskManagerService.hasActiveVisibleWindow(), which treats a UID as foreground if it has any visible non-toast window, including a pinned (picture-in-picture) activity. So a process bound by a client that only had a PiP window was allowed to start background activities. Per the commit message, this was inconsistent with regular BAL behavior, which requires a non-pinned visible window (the Android 15 tests include testForegroundTaskBlockedIfPinned). On Android 14 the bound-by-foreground branch also did not consult appSwitchState. On Android 15 that check was gated behind the flag Flags.balRespectAppSwitchStateWhenCheckBoundByForegroundUid().

How the fix works

Completeness

Behavior changes

Per major

Unknowns

Back to September 2026 · Findings