[MediaProjection] Fix package visibility check
getApplicationInfoAsUser should not be called after clearCallingIdentity, otherwise the package visibility restrictions are not applied. BUG: 276936135 Test: atest com.android.server.pm.test.appenumeration.AppEnumerationInternalTests#mediaProjectionManager_createProjection_cannotSeeTarget Change-Id: I4325bf55aee7a658dbf7d7c86be76fcb443331df Change-Id: I119fb86d0b1f06638e0d55aeebc1b092fd7a7f6b
This commit is contained in:
committed by
Song Chun Fan
parent
2fad91a2b7
commit
98261b47d4
@@ -357,12 +357,16 @@ public final class MediaProjectionManagerService extends SystemService
|
||||
} catch (NameNotFoundException e) {
|
||||
throw new IllegalArgumentException("No package matching :" + packageName);
|
||||
}
|
||||
|
||||
projection = new MediaProjection(type, uid, packageName, ai.targetSdkVersion,
|
||||
ai.isPrivilegedApp());
|
||||
if (isPermanentGrant) {
|
||||
mAppOps.setMode(AppOpsManager.OP_PROJECT_MEDIA,
|
||||
projection.uid, projection.packageName, AppOpsManager.MODE_ALLOWED);
|
||||
final long callingToken = Binder.clearCallingIdentity();
|
||||
try {
|
||||
projection = new MediaProjection(type, uid, packageName, ai.targetSdkVersion,
|
||||
ai.isPrivilegedApp());
|
||||
if (isPermanentGrant) {
|
||||
mAppOps.setMode(AppOpsManager.OP_PROJECT_MEDIA,
|
||||
projection.uid, projection.packageName, AppOpsManager.MODE_ALLOWED);
|
||||
}
|
||||
} finally {
|
||||
Binder.restoreCallingIdentity(callingToken);
|
||||
}
|
||||
return projection;
|
||||
}
|
||||
@@ -418,16 +422,9 @@ public final class MediaProjectionManagerService extends SystemService
|
||||
if (packageName == null || packageName.isEmpty()) {
|
||||
throw new IllegalArgumentException("package name must not be empty");
|
||||
}
|
||||
MediaProjection projection;
|
||||
final UserHandle callingUser = Binder.getCallingUserHandle();
|
||||
final long callingToken = Binder.clearCallingIdentity();
|
||||
try {
|
||||
projection = createProjectionInternal(uid, packageName, type, isPermanentGrant,
|
||||
callingUser, false);
|
||||
} finally {
|
||||
Binder.restoreCallingIdentity(callingToken);
|
||||
}
|
||||
return projection;
|
||||
return createProjectionInternal(uid, packageName, type, isPermanentGrant,
|
||||
callingUser, false);
|
||||
}
|
||||
|
||||
@Override // Binder call
|
||||
|
||||
Reference in New Issue
Block a user