summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHongming Jin <hongmingjin@google.com>2018-08-08 15:01:57 -0700
committerandroid-build-team Robot <android-build-team-robot@google.com>2018-09-10 23:19:54 +0000
commit25060bbde58faf298a7ed5cd9b0bf48acf0c2405 (patch)
treed0b69895749f3f98577a70db9b83b1f427ece641
parent181dc252ddec574464882970d3fab290e8b625b5 (diff)
downloadbase-25060bbde58faf298a7ed5cd9b0bf48acf0c2405.tar.gz
RESTRICT AUTOMERGE: Check both self and shared user id package for requested permissions.
Bug: 111752150 Test: Manual local test Change-Id: I80383300cd5d2455d08a0ad91000efa85404903b (cherry picked from commit 5e37e9d962c476202590bef32b87c2eb794d61a1)
-rw-r--r--services/core/java/com/android/server/pm/permission/BasePermission.java5
-rw-r--r--services/core/java/com/android/server/pm/permission/PermissionsState.java9
2 files changed, 12 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/pm/permission/BasePermission.java b/services/core/java/com/android/server/pm/permission/BasePermission.java
index 1d002efc546f..820258022fd5 100644
--- a/services/core/java/com/android/server/pm/permission/BasePermission.java
+++ b/services/core/java/com/android/server/pm/permission/BasePermission.java
@@ -39,6 +39,7 @@ import android.util.Slog;
import com.android.server.pm.DumpState;
import com.android.server.pm.PackageManagerService;
+import com.android.server.pm.PackageSetting;
import com.android.server.pm.PackageSettingBase;
import org.xmlpull.v1.XmlPullParser;
@@ -374,8 +375,10 @@ public final class BasePermission {
}
public void enforceDeclaredUsedAndRuntimeOrDevelopment(PackageParser.Package pkg) {
+ final PackageSetting pkgSetting = (PackageSetting) pkg.mExtras;
+ final PermissionsState permsState = pkgSetting.getPermissionsState();
int index = pkg.requestedPermissions.indexOf(name);
- if (index == -1) {
+ if (!permsState.hasRequestedPermission(name) && index == -1) {
throw new SecurityException("Package " + pkg.packageName
+ " has not requested permission " + name);
}
diff --git a/services/core/java/com/android/server/pm/permission/PermissionsState.java b/services/core/java/com/android/server/pm/permission/PermissionsState.java
index 11df380427eb..5e66bfc3cd3e 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionsState.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionsState.java
@@ -20,9 +20,9 @@ import android.content.pm.PackageManager;
import android.os.UserHandle;
import android.util.ArrayMap;
import android.util.ArraySet;
-
import android.util.SparseArray;
import android.util.SparseBooleanArray;
+
import com.android.internal.util.ArrayUtils;
import java.util.ArrayList;
@@ -291,6 +291,13 @@ public final class PermissionsState {
}
/**
+ * 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.
*