[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:
Songchun Fan
2023-04-06 18:23:49 -07:00
committed by Song Chun Fan
parent 2fad91a2b7
commit 98261b47d4

View File

@@ -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