RESTRICT AUTOMERGE Revoke SYSTEM_ALERT_WINDOW on upgrade past api 23 am: f6ba142a84
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20122955 Change-Id: I648f48d3a0395b64bdb4119074dcfb2f104386ca Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -12367,9 +12367,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
|
|
||||||
AsyncTask.execute(() -> {
|
AsyncTask.execute(() -> {
|
||||||
if (hasOldPkg) {
|
if (hasOldPkg) {
|
||||||
mPermissionManager.revokeRuntimePermissionsIfGroupChanged(pkg, oldPkg,
|
mPermissionManager.onPackageUpdated(pkg, oldPkg, allPackageNames,
|
||||||
allPackageNames, mPermissionCallback);
|
|
||||||
mPermissionManager.revokeStoragePermissionsIfScopeExpanded(pkg, oldPkg,
|
|
||||||
mPermissionCallback);
|
mPermissionCallback);
|
||||||
}
|
}
|
||||||
if (hasPermissionDefinitionChanges) {
|
if (hasPermissionDefinitionChanges) {
|
||||||
|
|||||||
@@ -646,6 +646,45 @@ public class PermissionManagerService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If the package was below api 23, got the SYSTEM_ALERT_WINDOW permission automatically, and
|
||||||
|
* then updated past api 23, and the app does not satisfy any of the other SAW permission flags,
|
||||||
|
* the permission should be revoked.
|
||||||
|
*
|
||||||
|
* @param newPackage The new package that was installed
|
||||||
|
* @param oldPackage The old package that was updated
|
||||||
|
*/
|
||||||
|
private void revokeSystemAlertWindowIfUpgradedPast23(
|
||||||
|
@NonNull PackageParser.Package newPackage,
|
||||||
|
@NonNull PackageParser.Package oldPackage,
|
||||||
|
@NonNull PermissionCallback permissionCallback) {
|
||||||
|
if (oldPackage.applicationInfo.targetSdkVersion >= Build.VERSION_CODES.M
|
||||||
|
|| newPackage.applicationInfo.targetSdkVersion < Build.VERSION_CODES.M
|
||||||
|
|| !newPackage.requestedPermissions
|
||||||
|
.contains(Manifest.permission.SYSTEM_ALERT_WINDOW)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
BasePermission saw;
|
||||||
|
synchronized (mLock) {
|
||||||
|
saw = mSettings.getPermissionLocked(Manifest.permission.SYSTEM_ALERT_WINDOW);
|
||||||
|
}
|
||||||
|
final PackageSetting ps = (PackageSetting) newPackage.mExtras;
|
||||||
|
if (grantSignaturePermission(Manifest.permission.SYSTEM_ALERT_WINDOW, newPackage, saw,
|
||||||
|
ps.getPermissionsState())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (int userId: mUserManagerInt.getUserIds()) {
|
||||||
|
try {
|
||||||
|
revokeRuntimePermission(Manifest.permission.SYSTEM_ALERT_WINDOW,
|
||||||
|
newPackage.packageName, false, userId, permissionCallback);
|
||||||
|
} catch (IllegalStateException | SecurityException e) {
|
||||||
|
Log.e(TAG, "unable to revoke SYSTEM_ALERT_WINDOW for "
|
||||||
|
+ newPackage.packageName + " user " + userId, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* We might auto-grant permissions if any permission of the group is already granted. Hence if
|
* We might auto-grant permissions if any permission of the group is already granted. Hence if
|
||||||
* the group of a granted permission changes we need to revoke it to avoid having permissions of
|
* the group of a granted permission changes we need to revoke it to avoid having permissions of
|
||||||
@@ -3184,25 +3223,22 @@ public class PermissionManagerService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If the app is updated, and has scoped storage permissions, then it is possible that the
|
* If the app is updated, then some checks need to be performed to ensure the
|
||||||
* app updated in an attempt to get unscoped storage. If so, revoke all storage permissions.
|
* package is not attempting to expoit permission changes across API boundaries.
|
||||||
* @param newPackage The new package that was installed
|
* @param newPackage The new package that was installed
|
||||||
* @param oldPackage The old package that was updated
|
* @param oldPackage The old package that was updated
|
||||||
|
* @param allPackageNames The current packages in the system
|
||||||
|
* @param permissionCallback Callback for permission changed
|
||||||
*/
|
*/
|
||||||
public void revokeStoragePermissionsIfScopeExpanded(
|
public void onPackageUpdated(
|
||||||
@NonNull PackageParser.Package newPackage,
|
|
||||||
@NonNull PackageParser.Package oldPackage,
|
|
||||||
@NonNull PermissionCallback permissionCallback) {
|
|
||||||
PermissionManagerService.this.revokeStoragePermissionsIfScopeExpanded(newPackage,
|
|
||||||
oldPackage, permissionCallback);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void revokeRuntimePermissionsIfGroupChanged(
|
|
||||||
@NonNull PackageParser.Package newPackage,
|
@NonNull PackageParser.Package newPackage,
|
||||||
@NonNull PackageParser.Package oldPackage,
|
@NonNull PackageParser.Package oldPackage,
|
||||||
@NonNull ArrayList<String> allPackageNames,
|
@NonNull ArrayList<String> allPackageNames,
|
||||||
@NonNull PermissionCallback permissionCallback) {
|
@NonNull PermissionCallback permissionCallback) {
|
||||||
|
PermissionManagerService.this.revokeStoragePermissionsIfScopeExpanded(newPackage,
|
||||||
|
oldPackage, permissionCallback);
|
||||||
|
PermissionManagerService.this.revokeSystemAlertWindowIfUpgradedPast23(newPackage,
|
||||||
|
oldPackage, permissionCallback);
|
||||||
PermissionManagerService.this.revokeRuntimePermissionsIfGroupChanged(newPackage,
|
PermissionManagerService.this.revokeRuntimePermissionsIfGroupChanged(newPackage,
|
||||||
oldPackage, allPackageNames, permissionCallback);
|
oldPackage, allPackageNames, permissionCallback);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -97,17 +97,15 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager
|
|||||||
public abstract void updateAllPermissions(@Nullable String volumeUuid, boolean sdkUpdate,
|
public abstract void updateAllPermissions(@Nullable String volumeUuid, boolean sdkUpdate,
|
||||||
@NonNull Collection<PackageParser.Package> allPacakges, PermissionCallback callback);
|
@NonNull Collection<PackageParser.Package> allPacakges, PermissionCallback callback);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* We might auto-grant permissions if any permission of the group is already granted. Hence if
|
* If the app is updated, then some checks need to be performed to ensure the package is not
|
||||||
* the group of a granted permission changes we need to revoke it to avoid having permissions of
|
* attempting to expoit permission changes across API boundaries.
|
||||||
* the new group auto-granted.
|
* @param newPackage The new package that was installed
|
||||||
*
|
* @param oldPackage The old package that was updated
|
||||||
* @param newPackage The new package that was installed
|
* @param allPackageNames The current packages in the system
|
||||||
* @param oldPackage The old package that was updated
|
* @param permissionCallback Callback for permission changed
|
||||||
* @param allPackageNames All packages
|
*/
|
||||||
* @param permissionCallback Callback for permission changed
|
public abstract void onPackageUpdated(
|
||||||
*/
|
|
||||||
public abstract void revokeRuntimePermissionsIfGroupChanged(
|
|
||||||
@NonNull PackageParser.Package newPackage,
|
@NonNull PackageParser.Package newPackage,
|
||||||
@NonNull PackageParser.Package oldPackage,
|
@NonNull PackageParser.Package oldPackage,
|
||||||
@NonNull ArrayList<String> allPackageNames,
|
@NonNull ArrayList<String> allPackageNames,
|
||||||
@@ -126,17 +124,6 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager
|
|||||||
@NonNull ArrayList<String> allPackageNames,
|
@NonNull ArrayList<String> allPackageNames,
|
||||||
@NonNull PermissionCallback permissionCallback);
|
@NonNull PermissionCallback permissionCallback);
|
||||||
|
|
||||||
/**
|
|
||||||
* If the app is updated, and has scoped storage permissions, then it is possible that the
|
|
||||||
* app updated in an attempt to get unscoped storage. If so, revoke all storage permissions.
|
|
||||||
* @param newPackage The new package that was installed
|
|
||||||
* @param oldPackage The old package that was updated
|
|
||||||
*/
|
|
||||||
public abstract void revokeStoragePermissionsIfScopeExpanded(
|
|
||||||
@NonNull PackageParser.Package newPackage,
|
|
||||||
@NonNull PackageParser.Package oldPackage,
|
|
||||||
@NonNull PermissionCallback permissionCallback);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add all permissions in the given package.
|
* Add all permissions in the given package.
|
||||||
* <p>
|
* <p>
|
||||||
|
|||||||
Reference in New Issue
Block a user