summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java18
1 files changed, 17 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
index 0a93653ede56..e6a018a9f39d 100644
--- a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
+++ b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
@@ -31,9 +31,11 @@ import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.PackageManagerInternal;
import android.content.pm.PackageManagerInternal.PackagesProvider;
import android.content.pm.PackageManagerInternal.SyncAdapterPackagesProvider;
+import android.content.pm.PermissionInfo;
import android.content.pm.ProviderInfo;
import android.content.pm.ResolveInfo;
import android.media.RingtoneManager;
@@ -1182,12 +1184,16 @@ public final class DefaultPermissionGrantPolicy {
final int permissionGrantCount = permissionGrants.size();
for (int j = 0; j < permissionGrantCount; j++) {
DefaultPermissionGrant permissionGrant = permissionGrants.get(j);
+ if (!isPermissionDangerous(permissionGrant.name)) {
+ Log.w(TAG, "Ignoring permission " + permissionGrant.name
+ + " which isn't dangerous");
+ continue;
+ }
if (permissions == null) {
permissions = new ArraySet<>();
} else {
permissions.clear();
}
- permissions.add(permissionGrant.name);
grantRuntimePermissions(pkg, permissions, permissionGrant.fixed, userId);
}
}
@@ -1350,6 +1356,16 @@ public final class DefaultPermissionGrantPolicy {
&& pkg.applicationInfo.targetSdkVersion > Build.VERSION_CODES.LOLLIPOP_MR1;
}
+ private boolean isPermissionDangerous(String name) {
+ try {
+ final PermissionInfo pi = mContext.getPackageManager().getPermissionInfo(name, 0);
+ return (pi.getProtectionFlags() & PermissionInfo.PROTECTION_DANGEROUS) != 0;
+ } catch (NameNotFoundException e) {
+ // When unknown assume it's dangerous to be on the safe side
+ return true;
+ }
+ }
+
private static final class DefaultPermissionGrant {
final String name;
final boolean fixed;