Android security tags, read closely by Lightrion

CVE-2025-22417 AI-generated analysis

platform/frameworks/base, WindowManager (services/core/java/com/android/server/wm/Transition.java, shell transitions / ActivityRecordInputSink)

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

In Transition.finishTransition (services/core/java/com/android/server/wm/Transition.java), the ActivityRecordInputSink (touch-blocking) state of visible participant activities is now written into each activity's pending transaction and flushed via scheduleAnimationLocked(), instead of being applied immediately through a freshly created standalone SurfaceControl.Transaction, to fix a race that could leave the state stale.

Root cause

After a transition finished, Transition.java allocated a new SurfaceControl.Transaction via ar.mWmService.mTransactionFactory.get(), called ar.mActivityRecordInputSink.applyChangesToSurfaceIfChanged() on it for every visible ActivityRecord participant, and applied it immediately. Per the commit message, when finishTransition ran before the pending transaction had been applied, the result could be a stale state. Because the InputWindowHandle is only applied on changes, a later prepareSurfaces pass did not fix it, so the incorrect input-sink state persisted.

How the fix works

Completeness

Behavior changes

Per major

Unknowns

Back to April 2025 · Findings