From ad44816045b6f89d57533bbe4650ddd881a6b4da Mon Sep 17 00:00:00 2001 From: Robin Lee Date: Thu, 26 Nov 2020 01:44:15 +0100 Subject: [PATCH] adb shell pm: create context as the right user Prevents cross-user shell commands throwing an exception like the following and crashing PackageManagerShellCommand. java.lang.SecurityException: You need INTERACT_ACROSS_USERS or MANAGE_USERS permission to: check isUserUnlockingOrUnlocked at UserManagerService.checkManageOrInteractPermissionIfCallerInOtherProfileGroup(UserManagerService.java:1534) at UserManagerService.isUserUnlockingOrUnlocked(UserManagerService.java:1472) at PackageManagerService.updateFlags(PackageManagerService.java:5410) at PackageManagerService.updateFlagsForPackage(PackageManagerService.java:5439) at PackageManagerService.updateFlagsForApplication(PackageManagerService.java:5446) at PackageManagerService.getApplicationInfoInternal(PackageManagerService.java:5120) at PackageManagerService.getApplicationInfo(PackageManagerService.java:5108) at PackageManager.getApplicationInfoAsUserUncached(PackageManager.java:8785) at PackageManager.access$000(PackageManager.java:102) at PackageManager$1.recompute(PackageManager.java:8798) at PackageManager$1.recompute(PackageManager.java:8795) at PropertyInvalidatedCache.query(PropertyInvalidatedCache.java:455) at PackageManager.getApplicationInfoAsUserCached(PackageManager.java:8813) at ActivityThread.getPackageInfo(ActivityThread.java:2275) at ContextImpl.createPackageContextAsUser(ContextImpl.java:2359) at ContextImpl.createPackageContext(ContextImpl.java:2346) at PackageManagerShellCommand.(PackageManagerShellCommand.java:162) at PackageManagerService.onShellCommand(PackageManagerService.java:22329) at Binder.shellCommand(Binder.java:949) at Binder.onTransact(Binder.java:832) at IPackageManager$Stub.onTransact(IPackageManager.java:4767) at PackageManagerService.onTransact(PackageManagerService.java:4505) at Binder.execTransactInternal(Binder.java:1186) at Binder.execTransact(Binder.java:1145) Bug: 159157348 Change-Id: I4854a3100f55b3190f9ad974a507be64ca9defa8 --- .../java/com/android/server/pm/PackageManagerShellCommand.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java index 9aa1a621a7600..2996cd13f7b15 100644 --- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java +++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java @@ -159,7 +159,8 @@ class PackageManagerShellCommand extends ShellCommand { mInterface = service; mPermissionManager = permissionManager; try { - mShellPackageContext = context.createPackageContext("com.android.shell", 0); + mShellPackageContext = context.createPackageContextAsUser( + "com.android.shell", 0, Binder.getCallingUserHandle()); } catch (NameNotFoundException e) { // should not happen throw new RuntimeException(e);