Android security tags, read closely by Lightrion

CVE-2025-32349 AI-generated analysis

platform/frameworks/base, WindowManager (services/core/java/com/android/server/wm: DisplayPolicy, WindowState, WindowStateAnimator)

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

WindowManager now forces the default Animation_Toast style on TYPE_TOAST windows from sessions without mCanAddInternalSystemWindow, and uses a fixed short alpha fade instead of the window's own exit animation when a non-system overlay is forcibly hidden, so an app can no longer control how long its overlay stays on screen during a forced hide.

Root cause

In DisplayPolicy.adjustWindowParamsLw, the TYPE_TOAST case clamped hideTimeoutMilliseconds to TOAST_WINDOW_TIMEOUT and set FLAG_NOT_TOUCHABLE, but left attrs.windowAnimations as the app supplied it. Per the commit message, legacy apps and deprecated custom-view toasts show TYPE_TOAST windows from their own process, so an untrusted app could attach arbitrary WindowManager.LayoutParams#windowAnimations. WindowState.setForceHideNonSystemOverlayWindowIfNeeded(true) applies to system alert window types and TYPE_TOAST from sessions lacking mCanAddInternalSystemWindow. When it ran for such a window it called hide(true /* doAnimation */, true). Per the second commit message, the window's specified exit animation could then be used, so the forced hide could run for a caller-chosen duration instead of a short, system-defined one. The commit message notes that regular text toasts (target API 30+) are drawn by SystemUI, which has the internal permission and is unaffected.

How the fix works

Completeness

Behavior changes

Per major

Unknowns

Back to September 2025 · Findings