Merge changes I6f314a65,I8020f029 into sc-dev
* changes: Properly fix allowlisting restricted permissions for secondary users on app upgrade. Revert "Fix allowlisting restricted permissions for secondary users on app"
This commit is contained in:
committed by
Android (Google) Code Review
commit
e5c0de0d2e
@@ -7955,12 +7955,9 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
} catch (PackageManagerException e) {
|
} catch (PackageManagerException e) {
|
||||||
Slog.w(TAG, "updateAllSharedLibrariesLPw failed: ", e);
|
Slog.w(TAG, "updateAllSharedLibrariesLPw failed: ", e);
|
||||||
}
|
}
|
||||||
final int[] userIds = mUserManager.getUserIds();
|
|
||||||
for (final int userId : userIds) {
|
|
||||||
mPermissionManager.onPackageInstalled(pkg,
|
mPermissionManager.onPackageInstalled(pkg,
|
||||||
PermissionManagerServiceInternal.PackageInstalledParams.DEFAULT,
|
PermissionManagerServiceInternal.PackageInstalledParams.DEFAULT,
|
||||||
userId);
|
UserHandle.USER_ALL);
|
||||||
}
|
|
||||||
writeSettingsLPrTEMP();
|
writeSettingsLPrTEMP();
|
||||||
}
|
}
|
||||||
} catch (PackageManagerException e) {
|
} catch (PackageManagerException e) {
|
||||||
@@ -19213,12 +19210,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
}
|
}
|
||||||
final int autoRevokePermissionsMode = installArgs.autoRevokePermissionsMode;
|
final int autoRevokePermissionsMode = installArgs.autoRevokePermissionsMode;
|
||||||
permissionParamsBuilder.setAutoRevokePermissionsMode(autoRevokePermissionsMode);
|
permissionParamsBuilder.setAutoRevokePermissionsMode(autoRevokePermissionsMode);
|
||||||
for (int currentUserId : allUsersList) {
|
mPermissionManager.onPackageInstalled(pkg, permissionParamsBuilder.build(), userId);
|
||||||
if (ps.getInstalled(currentUserId)) {
|
|
||||||
mPermissionManager.onPackageInstalled(pkg, permissionParamsBuilder.build(),
|
|
||||||
currentUserId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
res.name = pkgName;
|
res.name = pkgName;
|
||||||
res.uid = pkg.getUid();
|
res.uid = pkg.getUid();
|
||||||
@@ -21862,10 +21854,8 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
if (sharedUserPkgs == null) {
|
if (sharedUserPkgs == null) {
|
||||||
sharedUserPkgs = Collections.emptyList();
|
sharedUserPkgs = Collections.emptyList();
|
||||||
}
|
}
|
||||||
for (final int userId : allUserHandles) {
|
|
||||||
mPermissionManager.onPackageUninstalled(packageName, deletedPs.appId,
|
mPermissionManager.onPackageUninstalled(packageName, deletedPs.appId,
|
||||||
deletedPs.pkg, sharedUserPkgs, userId);
|
deletedPs.pkg, sharedUserPkgs, UserHandle.USER_ALL);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
clearPackagePreferredActivitiesLPw(
|
clearPackagePreferredActivitiesLPw(
|
||||||
deletedPs.name, changedUsers, UserHandle.USER_ALL);
|
deletedPs.name, changedUsers, UserHandle.USER_ALL);
|
||||||
@@ -22082,11 +22072,12 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (final int userId : allUserHandles) {
|
|
||||||
// The method below will take care of removing obsolete permissions and granting
|
// The method below will take care of removing obsolete permissions and granting
|
||||||
// install permissions.
|
// install permissions.
|
||||||
mPermissionManager.onPackageInstalled(pkg,
|
mPermissionManager.onPackageInstalled(pkg,
|
||||||
PermissionManagerServiceInternal.PackageInstalledParams.DEFAULT, userId);
|
PermissionManagerServiceInternal.PackageInstalledParams.DEFAULT,
|
||||||
|
UserHandle.USER_ALL);
|
||||||
|
for (final int userId : allUserHandles) {
|
||||||
if (applyUserRestrictions) {
|
if (applyUserRestrictions) {
|
||||||
mSettings.writePermissionStateForUserLPr(userId, false);
|
mSettings.writePermissionStateForUserLPr(userId, false);
|
||||||
}
|
}
|
||||||
@@ -22409,10 +22400,9 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
}
|
}
|
||||||
removeKeystoreDataIfNeeded(mInjector.getUserManagerInternal(), nextUserId, ps.appId);
|
removeKeystoreDataIfNeeded(mInjector.getUserManagerInternal(), nextUserId, ps.appId);
|
||||||
clearPackagePreferredActivities(ps.name, nextUserId);
|
clearPackagePreferredActivities(ps.name, nextUserId);
|
||||||
mPermissionManager.onPackageUninstalled(ps.name, ps.appId, pkg, sharedUserPkgs,
|
|
||||||
nextUserId);
|
|
||||||
mDomainVerificationManager.clearPackageForUser(ps.name, nextUserId);
|
mDomainVerificationManager.clearPackageForUser(ps.name, nextUserId);
|
||||||
}
|
}
|
||||||
|
mPermissionManager.onPackageUninstalled(ps.name, ps.appId, pkg, sharedUserPkgs, userId);
|
||||||
|
|
||||||
if (outInfo != null) {
|
if (outInfo != null) {
|
||||||
if ((flags & PackageManager.DELETE_KEEP_DATA) == 0) {
|
if ((flags & PackageManager.DELETE_KEEP_DATA) == 0) {
|
||||||
|
|||||||
@@ -4040,17 +4040,14 @@ public class PermissionManagerService extends IPermissionManager.Stub {
|
|||||||
*
|
*
|
||||||
* @param packageName The package that is updated
|
* @param packageName The package that is updated
|
||||||
* @param pkg The package that is updated, or {@code null} if package is deleted
|
* @param pkg The package that is updated, or {@code null} if package is deleted
|
||||||
* @param filterUserId If not {@link UserHandle.USER_ALL}, only restore the permission state for
|
|
||||||
* this particular user
|
|
||||||
*/
|
*/
|
||||||
private void updatePermissions(@NonNull String packageName, @Nullable AndroidPackage pkg,
|
private void updatePermissions(@NonNull String packageName, @Nullable AndroidPackage pkg) {
|
||||||
@UserIdInt int filterUserId) {
|
|
||||||
// If the package is being deleted, update the permissions of all the apps
|
// If the package is being deleted, update the permissions of all the apps
|
||||||
final int flags =
|
final int flags =
|
||||||
(pkg == null ? UPDATE_PERMISSIONS_ALL | UPDATE_PERMISSIONS_REPLACE_PKG
|
(pkg == null ? UPDATE_PERMISSIONS_ALL | UPDATE_PERMISSIONS_REPLACE_PKG
|
||||||
: UPDATE_PERMISSIONS_REPLACE_PKG);
|
: UPDATE_PERMISSIONS_REPLACE_PKG);
|
||||||
updatePermissions(packageName, pkg, getVolumeUuidForPackage(pkg), flags,
|
updatePermissions(
|
||||||
mDefaultPermissionCallback, filterUserId);
|
packageName, pkg, getVolumeUuidForPackage(pkg), flags, mDefaultPermissionCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -4072,8 +4069,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
|
|||||||
(fingerprintChanged
|
(fingerprintChanged
|
||||||
? UPDATE_PERMISSIONS_REPLACE_PKG | UPDATE_PERMISSIONS_REPLACE_ALL
|
? UPDATE_PERMISSIONS_REPLACE_PKG | UPDATE_PERMISSIONS_REPLACE_ALL
|
||||||
: 0);
|
: 0);
|
||||||
updatePermissions(null, null, volumeUuid, flags, mDefaultPermissionCallback,
|
updatePermissions(null, null, volumeUuid, flags, mDefaultPermissionCallback);
|
||||||
UserHandle.USER_ALL);
|
|
||||||
} finally {
|
} finally {
|
||||||
PackageManager.uncorkPackageInfoCache();
|
PackageManager.uncorkPackageInfoCache();
|
||||||
}
|
}
|
||||||
@@ -4122,14 +4118,12 @@ public class PermissionManagerService extends IPermissionManager.Stub {
|
|||||||
* all volumes
|
* all volumes
|
||||||
* @param flags Control permission for which apps should be updated
|
* @param flags Control permission for which apps should be updated
|
||||||
* @param callback Callback to call after permission changes
|
* @param callback Callback to call after permission changes
|
||||||
* @param filterUserId If not {@link UserHandle.USER_ALL}, only restore the permission state for
|
|
||||||
* this particular user
|
|
||||||
*/
|
*/
|
||||||
private void updatePermissions(final @Nullable String changingPkgName,
|
private void updatePermissions(final @Nullable String changingPkgName,
|
||||||
final @Nullable AndroidPackage changingPkg,
|
final @Nullable AndroidPackage changingPkg,
|
||||||
final @Nullable String replaceVolumeUuid,
|
final @Nullable String replaceVolumeUuid,
|
||||||
@UpdatePermissionFlags int flags,
|
@UpdatePermissionFlags int flags,
|
||||||
final @Nullable PermissionCallback callback, @UserIdInt int filterUserId) {
|
final @Nullable PermissionCallback callback) {
|
||||||
// TODO: Most of the methods exposing BasePermission internals [source package name,
|
// TODO: Most of the methods exposing BasePermission internals [source package name,
|
||||||
// etc..] shouldn't be needed. Instead, when we've parsed a permission that doesn't
|
// etc..] shouldn't be needed. Instead, when we've parsed a permission that doesn't
|
||||||
// have package settings, we should make note of it elsewhere [map between
|
// have package settings, we should make note of it elsewhere [map between
|
||||||
@@ -4165,7 +4159,8 @@ public class PermissionManagerService extends IPermissionManager.Stub {
|
|||||||
// Only replace for packages on requested volume
|
// Only replace for packages on requested volume
|
||||||
final String volumeUuid = getVolumeUuidForPackage(pkg);
|
final String volumeUuid = getVolumeUuidForPackage(pkg);
|
||||||
final boolean replace = replaceAll && Objects.equals(replaceVolumeUuid, volumeUuid);
|
final boolean replace = replaceAll && Objects.equals(replaceVolumeUuid, volumeUuid);
|
||||||
restorePermissionState(pkg, replace, changingPkgName, callback, filterUserId);
|
restorePermissionState(pkg, replace, changingPkgName, callback,
|
||||||
|
UserHandle.USER_ALL);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4174,7 +4169,8 @@ public class PermissionManagerService extends IPermissionManager.Stub {
|
|||||||
final String volumeUuid = getVolumeUuidForPackage(changingPkg);
|
final String volumeUuid = getVolumeUuidForPackage(changingPkg);
|
||||||
final boolean replace = ((flags & UPDATE_PERMISSIONS_REPLACE_PKG) != 0)
|
final boolean replace = ((flags & UPDATE_PERMISSIONS_REPLACE_PKG) != 0)
|
||||||
&& Objects.equals(replaceVolumeUuid, volumeUuid);
|
&& Objects.equals(replaceVolumeUuid, volumeUuid);
|
||||||
restorePermissionState(changingPkg, replace, changingPkgName, callback, filterUserId);
|
restorePermissionState(changingPkg, replace, changingPkgName, callback,
|
||||||
|
UserHandle.USER_ALL);
|
||||||
}
|
}
|
||||||
Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
|
Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
|
||||||
}
|
}
|
||||||
@@ -4841,8 +4837,9 @@ public class PermissionManagerService extends IPermissionManager.Stub {
|
|||||||
|
|
||||||
private void onPackageInstalledInternal(@NonNull AndroidPackage pkg,
|
private void onPackageInstalledInternal(@NonNull AndroidPackage pkg,
|
||||||
@NonNull PermissionManagerServiceInternal.PackageInstalledParams params,
|
@NonNull PermissionManagerServiceInternal.PackageInstalledParams params,
|
||||||
@UserIdInt int userId) {
|
@UserIdInt int[] userIds) {
|
||||||
updatePermissions(pkg.getPackageName(), pkg, userId);
|
updatePermissions(pkg.getPackageName(), pkg);
|
||||||
|
for (final int userId : userIds) {
|
||||||
addAllowlistedRestrictedPermissionsInternal(pkg,
|
addAllowlistedRestrictedPermissionsInternal(pkg,
|
||||||
params.getAllowlistedRestrictedPermissions(),
|
params.getAllowlistedRestrictedPermissions(),
|
||||||
FLAG_PERMISSION_WHITELIST_INSTALLER, userId);
|
FLAG_PERMISSION_WHITELIST_INSTALLER, userId);
|
||||||
@@ -4854,6 +4851,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
|
|||||||
}
|
}
|
||||||
grantRequestedRuntimePermissionsInternal(pkg, params.getGrantedPermissions(), userId);
|
grantRequestedRuntimePermissionsInternal(pkg, params.getGrantedPermissions(), userId);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void addAllowlistedRestrictedPermissionsInternal(@NonNull AndroidPackage pkg,
|
private void addAllowlistedRestrictedPermissionsInternal(@NonNull AndroidPackage pkg,
|
||||||
@NonNull List<String> allowlistedRestrictedPermissions,
|
@NonNull List<String> allowlistedRestrictedPermissions,
|
||||||
@@ -4875,7 +4873,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
|
|||||||
|
|
||||||
private void onPackageUninstalledInternal(@NonNull String packageName, int appId,
|
private void onPackageUninstalledInternal(@NonNull String packageName, int appId,
|
||||||
@Nullable AndroidPackage pkg, @NonNull List<AndroidPackage> sharedUserPkgs,
|
@Nullable AndroidPackage pkg, @NonNull List<AndroidPackage> sharedUserPkgs,
|
||||||
@UserIdInt int userId) {
|
@UserIdInt int[] userIds) {
|
||||||
// TODO: Move these checks to check PackageState to be more reliable.
|
// TODO: Move these checks to check PackageState to be more reliable.
|
||||||
// System packages should always have an available APK.
|
// System packages should always have an available APK.
|
||||||
if (pkg != null && pkg.isSystem()
|
if (pkg != null && pkg.isSystem()
|
||||||
@@ -4886,10 +4884,13 @@ public class PermissionManagerService extends IPermissionManager.Stub {
|
|||||||
// If we are only marking a system package as uninstalled, we need to keep its
|
// If we are only marking a system package as uninstalled, we need to keep its
|
||||||
// pregranted permission state so that it still works once it gets reinstalled, thus
|
// pregranted permission state so that it still works once it gets reinstalled, thus
|
||||||
// only reset the user modifications to its permission state.
|
// only reset the user modifications to its permission state.
|
||||||
|
for (final int userId : userIds) {
|
||||||
resetRuntimePermissionsInternal(pkg, userId);
|
resetRuntimePermissionsInternal(pkg, userId);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
updatePermissions(packageName, null, userId);
|
updatePermissions(packageName, null);
|
||||||
|
for (final int userId : userIds) {
|
||||||
if (sharedUserPkgs.isEmpty()) {
|
if (sharedUserPkgs.isEmpty()) {
|
||||||
removeUidStateAndResetPackageInstallPermissionsFixed(appId, packageName, userId);
|
removeUidStateAndResetPackageInstallPermissionsFixed(appId, packageName, userId);
|
||||||
} else {
|
} else {
|
||||||
@@ -4910,6 +4911,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
private List<LegacyPermission> getLegacyPermissions() {
|
private List<LegacyPermission> getLegacyPermissions() {
|
||||||
@@ -5181,8 +5183,11 @@ public class PermissionManagerService extends IPermissionManager.Stub {
|
|||||||
@NonNull PackageInstalledParams params, @UserIdInt int userId) {
|
@NonNull PackageInstalledParams params, @UserIdInt int userId) {
|
||||||
Objects.requireNonNull(pkg, "pkg");
|
Objects.requireNonNull(pkg, "pkg");
|
||||||
Objects.requireNonNull(params, "params");
|
Objects.requireNonNull(params, "params");
|
||||||
Preconditions.checkArgumentNonNegative(userId, "userId");
|
Preconditions.checkArgument(userId >= UserHandle.USER_SYSTEM
|
||||||
onPackageInstalledInternal(pkg, params, userId);
|
|| userId == UserHandle.USER_ALL, "userId");
|
||||||
|
final int[] userIds = userId == UserHandle.USER_ALL ? getAllUserIds()
|
||||||
|
: new int[] { userId };
|
||||||
|
onPackageInstalledInternal(pkg, params, userIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -5197,8 +5202,11 @@ public class PermissionManagerService extends IPermissionManager.Stub {
|
|||||||
@UserIdInt int userId) {
|
@UserIdInt int userId) {
|
||||||
Objects.requireNonNull(packageName, "packageName");
|
Objects.requireNonNull(packageName, "packageName");
|
||||||
Objects.requireNonNull(sharedUserPkgs, "sharedUserPkgs");
|
Objects.requireNonNull(sharedUserPkgs, "sharedUserPkgs");
|
||||||
Preconditions.checkArgumentNonNegative(userId, "userId");
|
Preconditions.checkArgument(userId >= UserHandle.USER_SYSTEM
|
||||||
onPackageUninstalledInternal(packageName, appId, pkg, sharedUserPkgs, userId);
|
|| userId == UserHandle.USER_ALL, "userId");
|
||||||
|
final int[] userIds = userId == UserHandle.USER_ALL ? getAllUserIds()
|
||||||
|
: new int[] { userId };
|
||||||
|
onPackageUninstalledInternal(packageName, appId, pkg, sharedUserPkgs, userIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
|
|||||||
Reference in New Issue
Block a user