From 226c6ccb96daa16974bb20cca7f468d2e44ade33 Mon Sep 17 00:00:00 2001 From: Hai Zhang Date: Tue, 15 Dec 2020 20:28:08 -0800 Subject: [PATCH] Use allowlist in permission internally. Now that our new APIs are named properly, clean up our naming internally as well. Bug: 158736025 Test: presubmit Change-Id: If70f8b012dec2d4f80e7fa1d36c47f6fbe370e81 --- .../permission/IPermissionManager.aidl | 10 +-- .../android/permission/PermissionManager.java | 10 +-- .../permission/PermissionManagerService.java | 75 ++++++++++--------- 3 files changed, 48 insertions(+), 47 deletions(-) diff --git a/core/java/android/permission/IPermissionManager.aidl b/core/java/android/permission/IPermissionManager.aidl index 4ad17ef589454..441908dca03fc 100644 --- a/core/java/android/permission/IPermissionManager.aidl +++ b/core/java/android/permission/IPermissionManager.aidl @@ -56,13 +56,13 @@ interface IPermissionManager { void removeOnPermissionsChangeListener(in IOnPermissionsChangeListener listener); - List getWhitelistedRestrictedPermissions(String packageName, + List getAllowlistedRestrictedPermissions(String packageName, int flags, int userId); - boolean addWhitelistedRestrictedPermission(String packageName, String permName, + boolean addAllowlistedRestrictedPermission(String packageName, String permissionName, int flags, int userId); - boolean removeWhitelistedRestrictedPermission(String packageName, String permName, + boolean removeAllowlistedRestrictedPermission(String packageName, String permissionName, int flags, int userId); void grantRuntimePermission(String packageName, String permName, int userId); @@ -87,7 +87,7 @@ interface IPermissionManager { List getAutoRevokeExemptionGrantedPackages(int userId); - boolean setAutoRevokeWhitelisted(String packageName, boolean whitelisted, int userId); + boolean setAutoRevokeExempted(String packageName, boolean exempted, int userId); - boolean isAutoRevokeWhitelisted(String packageName, int userId); + boolean isAutoRevokeExempted(String packageName, int userId); } diff --git a/core/java/android/permission/PermissionManager.java b/core/java/android/permission/PermissionManager.java index d31e0129fb27f..87f3764f5ca05 100644 --- a/core/java/android/permission/PermissionManager.java +++ b/core/java/android/permission/PermissionManager.java @@ -510,7 +510,7 @@ public final class PermissionManager { public Set getAllowlistedRestrictedPermissions(@NonNull String packageName, @PackageManager.PermissionWhitelistFlags int allowlistFlag) { try { - final List allowlist = mPermissionManager.getWhitelistedRestrictedPermissions( + final List allowlist = mPermissionManager.getAllowlistedRestrictedPermissions( packageName, allowlistFlag, mContext.getUserId()); if (allowlist == null) { return Collections.emptySet(); @@ -578,7 +578,7 @@ public final class PermissionManager { @NonNull String permissionName, @PackageManager.PermissionWhitelistFlags int allowlistFlags) { try { - return mPermissionManager.addWhitelistedRestrictedPermission(packageName, + return mPermissionManager.addAllowlistedRestrictedPermission(packageName, permissionName, allowlistFlags, mContext.getUserId()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); @@ -642,7 +642,7 @@ public final class PermissionManager { @NonNull String permissionName, @PackageManager.PermissionWhitelistFlags int allowlistFlags) { try { - return mPermissionManager.removeWhitelistedRestrictedPermission(packageName, + return mPermissionManager.removeAllowlistedRestrictedPermission(packageName, permissionName, allowlistFlags, mContext.getUserId()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); @@ -668,7 +668,7 @@ public final class PermissionManager { conditional = true) public boolean isAutoRevokeExempted(@NonNull String packageName) { try { - return mPermissionManager.isAutoRevokeWhitelisted(packageName, mContext.getUserId()); + return mPermissionManager.isAutoRevokeExempted(packageName, mContext.getUserId()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -697,7 +697,7 @@ public final class PermissionManager { conditional = true) public boolean setAutoRevokeExempted(@NonNull String packageName, boolean exempted) { try { - return mPermissionManager.setAutoRevokeWhitelisted(packageName, exempted, + return mPermissionManager.setAutoRevokeExempted(packageName, exempted, mContext.getUserId()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java index 221347b0456f4..2107536fdb83a 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java @@ -1117,8 +1117,9 @@ public class PermissionManagerService extends IPermissionManager.Stub { mOnPermissionChangeListeners.removeListener(listener); } + @Nullable @Override - @Nullable public List getWhitelistedRestrictedPermissions(@NonNull String packageName, + public List getAllowlistedRestrictedPermissions(@NonNull String packageName, @PermissionWhitelistFlags int flags, @UserIdInt int userId) { Objects.requireNonNull(packageName); Preconditions.checkFlagsArgument(flags, @@ -1131,7 +1132,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { if (UserHandle.getCallingUserId() != userId) { mContext.enforceCallingOrSelfPermission( android.Manifest.permission.INTERACT_ACROSS_USERS, - "getWhitelistedRestrictedPermissions for user " + userId); + "getAllowlistedRestrictedPermissions for user " + userId); } final AndroidPackage pkg = mPackageManagerInt.getPackage(packageName); @@ -1217,7 +1218,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { } @Override - public boolean addWhitelistedRestrictedPermission(@NonNull String packageName, + public boolean addAllowlistedRestrictedPermission(@NonNull String packageName, @NonNull String permName, @PermissionWhitelistFlags int flags, @UserIdInt int userId) { // Other argument checks are done in get/setAllowlistedRestrictedPermissions @@ -1228,7 +1229,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { } List permissions = - getWhitelistedRestrictedPermissions(packageName, flags, userId); + getAllowlistedRestrictedPermissions(packageName, flags, userId); if (permissions == null) { permissions = new ArrayList<>(1); } @@ -1255,14 +1256,14 @@ public class PermissionManagerService extends IPermissionManager.Stub { if (isImmutablyRestrictedPermission && mContext.checkCallingOrSelfPermission( Manifest.permission.WHITELIST_RESTRICTED_PERMISSIONS) != PackageManager.PERMISSION_GRANTED) { - throw new SecurityException("Cannot modify whitelisting of an immutably " + throw new SecurityException("Cannot modify allowlisting of an immutably " + "restricted permission: " + permName); } return true; } @Override - public boolean removeWhitelistedRestrictedPermission(@NonNull String packageName, + public boolean removeAllowlistedRestrictedPermission(@NonNull String packageName, @NonNull String permName, @PermissionWhitelistFlags int flags, @UserIdInt int userId) { // Other argument checks are done in get/setAllowlistedRestrictedPermissions @@ -1273,7 +1274,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { } final List permissions = - getWhitelistedRestrictedPermissions(packageName, flags, userId); + getAllowlistedRestrictedPermissions(packageName, flags, userId); if (permissions != null && permissions.remove(permName)) { return setAllowlistedRestrictedPermissions(packageName, permissions, flags, userId); @@ -1328,20 +1329,20 @@ public class PermissionManagerService extends IPermissionManager.Stub { + " being installer on record or " + Manifest.permission.WHITELIST_RESTRICTED_PERMISSIONS); } - final List whitelistedPermissions = - getWhitelistedRestrictedPermissions(pkg.getPackageName(), flags, userId); + final List allowlistedPermissions = + getAllowlistedRestrictedPermissions(pkg.getPackageName(), flags, userId); if (permissions == null || permissions.isEmpty()) { - if (whitelistedPermissions == null || whitelistedPermissions.isEmpty()) { + if (allowlistedPermissions == null || allowlistedPermissions.isEmpty()) { return true; } } else { // Only the system can add and remove while the installer can only remove. final int permissionCount = permissions.size(); for (int i = 0; i < permissionCount; i++) { - if ((whitelistedPermissions == null - || !whitelistedPermissions.contains(permissions.get(i))) + if ((allowlistedPermissions == null + || !allowlistedPermissions.contains(permissions.get(i))) && !isCallerPrivileged) { - throw new SecurityException("Adding to upgrade whitelist requires" + throw new SecurityException("Adding to upgrade allowlist requires" + Manifest.permission.WHITELIST_RESTRICTED_PERMISSIONS); } } @@ -1349,7 +1350,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { if ((flags & PackageManager.FLAG_PERMISSION_WHITELIST_INSTALLER) != 0) { if (!isCallerPrivileged && !isCallerInstallerOnRecord) { - throw new SecurityException("Modifying installer whitelist requires" + throw new SecurityException("Modifying installer allowlist requires" + " being installer on record or " + Manifest.permission.WHITELIST_RESTRICTED_PERMISSIONS); } @@ -1367,8 +1368,8 @@ public class PermissionManagerService extends IPermissionManager.Stub { } @Override - public boolean setAutoRevokeWhitelisted( - @NonNull String packageName, boolean whitelisted, int userId) { + public boolean setAutoRevokeExempted( + @NonNull String packageName, boolean exempted, int userId) { Objects.requireNonNull(packageName); final AndroidPackage pkg = mPackageManagerInt.getPackage(packageName); @@ -1378,7 +1379,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { return false; } - return setAutoRevokeExemptedInternal(pkg, whitelisted, userId); + return setAutoRevokeExemptedInternal(pkg, exempted, userId); } private boolean setAutoRevokeExemptedInternal(@NonNull AndroidPackage pkg, boolean exempted, @@ -1386,7 +1387,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { final int packageUid = UserHandle.getUid(userId, pkg.getUid()); if (mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_AUTO_REVOKE_MANAGED_BY_INSTALLER, packageUid, pkg.getPackageName()) != MODE_ALLOWED) { - // Whitelist user set - don't override + // Allowlist user set - don't override return false; } @@ -1420,7 +1421,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { } @Override - public boolean isAutoRevokeWhitelisted(@NonNull String packageName, int userId) { + public boolean isAutoRevokeExempted(@NonNull String packageName, int userId) { Objects.requireNonNull(packageName); final AndroidPackage pkg = mPackageManagerInt.getPackage(packageName); @@ -2872,7 +2873,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { boolean softRestricted = bp.isSoftRestricted(); // If permission policy is not ready we don't deal with restricted - // permissions as the policy may whitelist some permissions. Once + // permissions as the policy may allowlist some permissions. Once // the policy is initialized we would re-evaluate permissions. final boolean permissionPolicyInitialized = isPermissionPolicyInitialized.get(userId); @@ -3576,9 +3577,9 @@ public class PermissionManagerService extends IPermissionManager.Stub { if (isInSystemConfigPrivAppPermissions(pkg, permissionName)) { return true; } - // Only enforce whitelist this on boot + // Only enforce the allowlist on boot if (!mSystemReady - // Updated system apps do not need to be whitelisted + // Updated system apps do not need to be allowlisted && !isUpdatedSystemApp) { final ApexManager apexManager = ApexManager.getInstance(); final String packageName = pkg.getPackageName(); @@ -3587,7 +3588,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { final boolean isInUpdatedApex = containingApexPackageName != null && !apexManager.isFactory(apexManager.getPackageInfo(containingApexPackageName, MATCH_ACTIVE_PACKAGE)); - // Apps that are in updated apexs' do not need to be whitelisted + // Apps that are in updated apexs' do not need to be allowlisted if (!isInUpdatedApex) { // it's only a reportable violation if the permission isn't explicitly // denied @@ -3596,7 +3597,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { } Slog.w(TAG, "Privileged permission " + permissionName + " for package " + packageName + " (" + pkg.getPath() - + ") not in privapp-permissions whitelist"); + + ") not in privapp-permissions allowlist"); if (RoSystemProperties.CONTROL_PRIVAPP_PERMISSIONS_ENFORCE) { synchronized (mLock) { if (mPrivappPermissionsViolations == null) { @@ -3775,10 +3776,10 @@ public class PermissionManagerService extends IPermissionManager.Stub { int newFlags = oldFlags; int mask = 0; - int whitelistFlagsCopy = allowlistFlags; - while (whitelistFlagsCopy != 0) { - final int flag = 1 << Integer.numberOfTrailingZeros(whitelistFlagsCopy); - whitelistFlagsCopy &= ~flag; + int allowlistFlagsCopy = allowlistFlags; + while (allowlistFlagsCopy != 0) { + final int flag = 1 << Integer.numberOfTrailingZeros(allowlistFlagsCopy); + allowlistFlagsCopy &= ~flag; switch (flag) { case FLAG_PERMISSION_WHITELIST_SYSTEM: { mask |= FLAG_PERMISSION_RESTRICTION_SYSTEM_EXEMPT; @@ -3825,26 +3826,26 @@ public class PermissionManagerService extends IPermissionManager.Stub { updatePermissions = true; - final boolean wasWhitelisted = (oldFlags + final boolean wasAllowlisted = (oldFlags & (PackageManager.FLAGS_PERMISSION_RESTRICTION_ANY_EXEMPT)) != 0; - final boolean isWhitelisted = (newFlags + final boolean isAllowlisted = (newFlags & (PackageManager.FLAGS_PERMISSION_RESTRICTION_ANY_EXEMPT)) != 0; // If the permission is policy fixed as granted but it is no longer - // on any of the whitelists we need to clear the policy fixed flag - // as whitelisting trumps policy i.e. policy cannot grant a non + // on any of the allowlists we need to clear the policy fixed flag + // as allowlisting trumps policy i.e. policy cannot grant a non // grantable permission. if ((oldFlags & PackageManager.FLAG_PERMISSION_POLICY_FIXED) != 0) { - if (!isWhitelisted && isGranted) { + if (!isAllowlisted && isGranted) { mask |= PackageManager.FLAG_PERMISSION_POLICY_FIXED; newFlags &= ~PackageManager.FLAG_PERMISSION_POLICY_FIXED; } } - // If we are whitelisting an app that does not support runtime permissions + // If we are allowlisting an app that does not support runtime permissions // we need to make sure it goes through the permission review UI at launch. if (pkg.getTargetSdkVersion() < Build.VERSION_CODES.M - && !wasWhitelisted && isWhitelisted) { + && !wasAllowlisted && isAllowlisted) { mask |= PackageManager.FLAG_PERMISSION_REVIEW_REQUIRED; newFlags |= PackageManager.FLAG_PERMISSION_REVIEW_REQUIRED; } @@ -3854,7 +3855,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { } if (updatePermissions) { - // Update permission of this app to take into account the new whitelist state. + // Update permission of this app to take into account the new allowlist state. restorePermissionState(pkg, false, pkg.getPackageName(), mDefaultPermissionCallback); // If this resulted in losing a permission we need to kill the app. @@ -4487,7 +4488,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { synchronized (mLock) { if (mPrivappPermissionsViolations != null) { throw new IllegalStateException("Signature|privileged permissions not in " - + "privapp-permissions whitelist: " + mPrivappPermissionsViolations); + + "privapp-permissions allowlist: " + mPrivappPermissionsViolations); } }