From 36070b414a710dd09a24698699f501d58c5772a4 Mon Sep 17 00:00:00 2001 From: rich cannings Date: Tue, 9 Oct 2012 11:50:15 -0700 Subject: [PATCH] Fix verfication bypassed for adb installs ADB installs appear as UserHandle.USER_ALL, and can only be performed by UserHandle.USER_OWNER, so use the package verifier for UserHandle.USER_OWNER. This returns a valid userId to call PackageManagerService.getPackageUid. Bug: 7293091 Change-Id: I7a5497cfe5fa2e7aa804345cf9f507ec26a0db21 --- .../com/android/server/pm/PackageManagerService.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java index 0600f5c89d5d2..b8d728684874a 100644 --- a/services/java/com/android/server/pm/PackageManagerService.java +++ b/services/java/com/android/server/pm/PackageManagerService.java @@ -6374,12 +6374,22 @@ public class PackageManagerService extends IPackageManager.Stub { mArgs = args; if (ret == PackageManager.INSTALL_SUCCEEDED) { + /* + * ADB installs appear as UserHandle.USER_ALL, and can only be performed by + * UserHandle.USER_OWNER, so use the package verifier for UserHandle.USER_OWNER. + */ + int userIdentifier = getUser().getIdentifier(); + if (userIdentifier == UserHandle.USER_ALL + && ((flags & PackageManager.INSTALL_FROM_ADB) != 0)) { + userIdentifier = UserHandle.USER_OWNER; + } + /* * Determine if we have any installed package verifiers. If we * do, then we'll defer to them to verify the packages. */ final int requiredUid = mRequiredVerifierPackage == null ? -1 - : getPackageUid(mRequiredVerifierPackage, getUser().getIdentifier()); + : getPackageUid(mRequiredVerifierPackage, userIdentifier); if (requiredUid != -1 && isVerificationEnabled(flags)) { final Intent verification = new Intent( Intent.ACTION_PACKAGE_NEEDS_VERIFICATION);