Merge "Read newImplicit perms before modifying perm state" into qt-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
bf70e9ccdf
@@ -922,6 +922,8 @@ public class PermissionManagerService {
|
||||
permissionsState.setGlobalGids(mGlobalGids);
|
||||
|
||||
synchronized (mLock) {
|
||||
ArraySet<String> newImplicitPermissions = new ArraySet<>();
|
||||
|
||||
final int N = pkg.requestedPermissions.size();
|
||||
for (int i = 0; i < N; i++) {
|
||||
final String permName = pkg.requestedPermissions.get(i);
|
||||
@@ -943,6 +945,17 @@ public class PermissionManagerService {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Cache newImplicitPermissions before modifing permissionsState as for the shared
|
||||
// uids the original and new state are the same object
|
||||
if (!origPermissions.hasRequestedPermission(permName)
|
||||
&& pkg.implicitPermissions.contains(permName)) {
|
||||
newImplicitPermissions.add(permName);
|
||||
|
||||
if (DEBUG_PERMISSIONS) {
|
||||
Slog.i(TAG, permName + " is newly added for " + pkg.packageName);
|
||||
}
|
||||
}
|
||||
|
||||
// Limit ephemeral apps to ephemeral allowed permissions.
|
||||
if (pkg.applicationInfo.isInstantApp() && !bp.isInstant()) {
|
||||
if (DEBUG_PERMISSIONS) {
|
||||
@@ -1298,7 +1311,7 @@ public class PermissionManagerService {
|
||||
updatedUserIds = revokePermissionsNoLongerImplicitLocked(permissionsState, pkg,
|
||||
updatedUserIds);
|
||||
updatedUserIds = setInitialGrantForNewImplicitPermissionsLocked(origPermissions,
|
||||
permissionsState, pkg, updatedUserIds);
|
||||
permissionsState, pkg, newImplicitPermissions, updatedUserIds);
|
||||
}
|
||||
|
||||
// Persist the runtime permissions state for users with changes. If permissions
|
||||
@@ -1437,27 +1450,9 @@ public class PermissionManagerService {
|
||||
private @NonNull int[] setInitialGrantForNewImplicitPermissionsLocked(
|
||||
@NonNull PermissionsState origPs,
|
||||
@NonNull PermissionsState ps, @NonNull PackageParser.Package pkg,
|
||||
@NonNull ArraySet<String> newImplicitPermissions,
|
||||
@NonNull int[] updatedUserIds) {
|
||||
String pkgName = pkg.packageName;
|
||||
ArraySet<String> newImplicitPermissions = new ArraySet<>();
|
||||
|
||||
int numRequestedPerms = pkg.requestedPermissions.size();
|
||||
for (int i = 0; i < numRequestedPerms; i++) {
|
||||
BasePermission bp = mSettings.getPermissionLocked(pkg.requestedPermissions.get(i));
|
||||
if (bp != null) {
|
||||
String perm = bp.getName();
|
||||
|
||||
if (!origPs.hasRequestedPermission(perm) && pkg.implicitPermissions.contains(
|
||||
perm)) {
|
||||
newImplicitPermissions.add(perm);
|
||||
|
||||
if (DEBUG_PERMISSIONS) {
|
||||
Slog.i(TAG, perm + " is newly added for " + pkgName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ArrayMap<String, ArraySet<String>> newToSplitPerms = new ArrayMap<>();
|
||||
|
||||
int numSplitPerms = PermissionManager.SPLIT_PERMISSIONS.size();
|
||||
|
||||
@@ -11,6 +11,9 @@
|
||||
},
|
||||
{
|
||||
"include-filter": "android.permission.cts.PermissionFlagsTest"
|
||||
},
|
||||
{
|
||||
"include-filter": "android.permission.cts.SharedUidPermissionsTest"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user