Merge "Revise the checking logic of checkPackage"

This commit is contained in:
Jackal Guo
2021-11-03 05:54:32 +00:00
committed by Android (Google) Code Review

View File

@@ -3307,15 +3307,23 @@ public class AppOpsService extends IAppOpsService.Stub {
Objects.requireNonNull(packageName);
try {
verifyAndGetBypass(uid, packageName, null);
if (filterAppAccessUnlocked(packageName)) {
return AppOpsManager.MODE_ERRORED;
// When the caller is the system, it's possible that the packageName is the special
// one (e.g., "root") which isn't actually existed.
if (resolveUid(packageName) == uid
|| (isPackageExisted(packageName) && !filterAppAccessUnlocked(packageName))) {
return AppOpsManager.MODE_ALLOWED;
}
return AppOpsManager.MODE_ALLOWED;
return AppOpsManager.MODE_ERRORED;
} catch (SecurityException ignored) {
return AppOpsManager.MODE_ERRORED;
}
}
private boolean isPackageExisted(String packageName) {
return LocalServices.getService(PackageManagerInternal.class)
.getPackageSetting(packageName) != null;
}
/**
* This method will check with PackageManager to determine if the package provided should
* be visible to the {@link Binder#getCallingUid()}.