From 8da6786608e374c20ae584b1c404fd4894786e46 Mon Sep 17 00:00:00 2001 From: akirilov Date: Fri, 24 Aug 2018 15:43:05 -0700 Subject: [PATCH] RESTRICT AUTOMERGE: Check both self and shared user id package for requested permissions. Bug: 111752150 Test: Manual local test Change-Id: I0b48a20525f87fc6f5ab8d7e70aa7d11cd747f97 --- .../java/com/android/server/pm/PackageManagerService.java | 5 ++++- .../core/java/com/android/server/pm/PermissionsState.java | 8 ++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 8c5f196a4f798..1b1161d93abaf 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -250,6 +250,7 @@ import com.android.server.SystemConfig; import com.android.server.Watchdog; import com.android.server.net.NetworkPolicyManagerInternal; import com.android.server.pm.PermissionsState.PermissionState; +import com.android.server.pm.PackageSetting; import com.android.server.pm.Settings.DatabaseVersion; import com.android.server.pm.Settings.VersionInfo; import com.android.server.storage.DeviceStorageMonitorInternal; @@ -4103,8 +4104,10 @@ public class PackageManagerService extends IPackageManager.Stub { private static void enforceDeclaredAsUsedAndRuntimeOrDevelopmentPermission(PackageParser.Package pkg, BasePermission bp) { + final PackageSetting pkgSetting = (PackageSetting) pkg.mExtras; + final PermissionsState permsState = pkgSetting.getPermissionsState(); int index = pkg.requestedPermissions.indexOf(bp.name); - if (index == -1) { + if (!permsState.hasRequestedPermission(bp.name) && index == -1) { throw new SecurityException("Package " + pkg.packageName + " has not requested permission " + bp.name); } diff --git a/services/core/java/com/android/server/pm/PermissionsState.java b/services/core/java/com/android/server/pm/PermissionsState.java index 007b73814256c..f307ce2999fe0 100644 --- a/services/core/java/com/android/server/pm/PermissionsState.java +++ b/services/core/java/com/android/server/pm/PermissionsState.java @@ -260,6 +260,14 @@ public final class PermissionsState { return false; } + /** + * Returns whether the state has any known request for the given permission name, + * whether or not it has been granted. + */ + public boolean hasRequestedPermission(String name) { + return mPermissions != null && (mPermissions.get(name) != null); + } + /** * Gets all permissions for a given device user id regardless if they * are install time or runtime permissions.