Android security tags, read closely by Lightrion

CVE-2026-49887 AI-generated analysis

platform/frameworks/base, packages/PackageInstaller (v2 install flow, InstallRepository)

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.

Fixes an inverted boolean in PackageInstaller v2's InstallRepository.maybeRemoveInvalidInstallerPackageName so that a mismatching EXTRA_INSTALLER_PACKAGE_NAME is stripped when the caller lacks INSTALL_PACKAGES, rather than when it holds it.

Root cause

In packages/PackageInstaller/src/com/android/packageinstaller/v2/model/InstallRepository.kt, maybeRemoveInvalidInstallerPackageName() is meant to drop a caller-supplied Intent.EXTRA_INSTALLER_PACKAGE_NAME that differs from the calling package unless the caller holds android.permission.INSTALL_PACKAGES. The condition was written as `&& isPermissionGranted(packageManager, INSTALL_PACKAGES, callerInfo.packageName)`, the opposite of the intended `!isPermissionGranted(...)`. As a result, a caller without INSTALL_PACKAGES kept its arbitrary installer package name in the intent (the extra was never removed), while callers that did hold the permission had their installer name removed. The commit message states the inversion was introduced while porting the V1 PackageInstaller logic to V2.

How the fix works

Completeness

Behavior changes

Per major

Unknowns

Back to September 2026 · Findings