Android security tags, read closely by Lightrion

CVE-2025-48537 AI-generated analysis

platform/frameworks/base, NotificationManagerService / Zen mode (ZenModeConditions, ConditionProviders)

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

ZenModeConditions.evaluateRule now maps condition ids to built-in system ConditionProviderServices only for system-owned or manual rules, rejects non-system rules whose component is in the "android" package, and tracks subscriptions by (Uri, ComponentName) pairs instead of by Uri alone.

Root cause

In services/core/java/com/android/server/notification/ZenModeConditions.java, evaluateRule looped over mConditionProviders.getSystemProviders() for every rule. When sp.isValidConditionId(id) matched, it called ensureRecordExists for the system CPS and overwrote rule.component with the system component, no matter which package owned the rule. Nothing stopped a non-system rule from carrying a component in the SYSTEM_AUTHORITY ("android") package. In addition, mSubscriptions was an ArrayMap<Uri, ComponentName> and the `current` set in evaluateConfig was an ArraySet<Uri>. Subscription bookkeeping (subscribeIfNecessary / unsubscribeIfNecessary) was therefore keyed by Uri only, which mixed up rules that share a conditionId but belong to different CPSes.

How the fix works

Completeness

Behavior changes

Per major

Unknowns

Back to September 2025 · Findings