Loading services/core/java/com/android/server/pm/permission/PermissionManagerService.java +42 −24 Original line number Diff line number Diff line Loading @@ -4220,6 +4220,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { // If the target package is being uninstalled, we need to revoke this permission // From all other packages if (pkg == null || !hasPermission(pkg, bp.getName())) { if (!isPermissionDeclaredByDisabledSystemPkg(bp)) { Slog.i(TAG, "Removing permission " + bp.getName() + " that used to be declared by " + bp.getPackageName()); if (bp.isRuntime()) { Loading Loading @@ -4248,6 +4249,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { } }); } } synchronized (mLock) { mRegistry.removePermission(bp.getName()); } Loading @@ -4271,6 +4273,22 @@ public class PermissionManagerService extends IPermissionManager.Stub { return changed; } private boolean isPermissionDeclaredByDisabledSystemPkg(@NonNull Permission permission) { final PackageSetting disabledSourcePs = mPackageManagerInt.getDisabledSystemPackage( permission.getPackageName()); if (disabledSourcePs != null && disabledSourcePs.getPkg() != null) { final String permissionName = permission.getName(); final List<ParsedPermission> sourcePerms = disabledSourcePs.getPkg().getPermissions(); for (ParsedPermission sourcePerm : sourcePerms) { if (TextUtils.equals(permissionName, sourcePerm.getName()) && permission.getProtectionLevel() == sourcePerm.getProtectionLevel()) { return true; } } } return false; } /** * Revoke a runtime permission from a package for a given user ID. */ Loading Loading
services/core/java/com/android/server/pm/permission/PermissionManagerService.java +42 −24 Original line number Diff line number Diff line Loading @@ -4220,6 +4220,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { // If the target package is being uninstalled, we need to revoke this permission // From all other packages if (pkg == null || !hasPermission(pkg, bp.getName())) { if (!isPermissionDeclaredByDisabledSystemPkg(bp)) { Slog.i(TAG, "Removing permission " + bp.getName() + " that used to be declared by " + bp.getPackageName()); if (bp.isRuntime()) { Loading Loading @@ -4248,6 +4249,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { } }); } } synchronized (mLock) { mRegistry.removePermission(bp.getName()); } Loading @@ -4271,6 +4273,22 @@ public class PermissionManagerService extends IPermissionManager.Stub { return changed; } private boolean isPermissionDeclaredByDisabledSystemPkg(@NonNull Permission permission) { final PackageSetting disabledSourcePs = mPackageManagerInt.getDisabledSystemPackage( permission.getPackageName()); if (disabledSourcePs != null && disabledSourcePs.getPkg() != null) { final String permissionName = permission.getName(); final List<ParsedPermission> sourcePerms = disabledSourcePs.getPkg().getPermissions(); for (ParsedPermission sourcePerm : sourcePerms) { if (TextUtils.equals(permissionName, sourcePerm.getName()) && permission.getProtectionLevel() == sourcePerm.getProtectionLevel()) { return true; } } } return false; } /** * Revoke a runtime permission from a package for a given user ID. */ Loading