summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Song Chun Fan <schfan@google.com> 2024-04-10 17:14:42 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-04-10 17:14:42 +0000
commitdb03730bb962bc5f26004f256e5b4f8c99247e40 (patch)
treec46ea4d1d546ea6c3ec53cdb0a331ed88f708265
parentde5f1bae6aa9bc09d05e06bef99ad7a22edfa557 (diff)
parentcef1aed9bde9dc050bdb699af54b07953a04fdef (diff)
Merge "[pm] fix a deadlock" into main
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java13
1 files changed, 9 insertions, 4 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 68cd3e463905..614828add52b 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -5753,17 +5753,22 @@ public class PackageManagerService implements PackageSender, TestUtilityService
@Override
public void setApplicationCategoryHint(String packageName, int categoryHint,
String callerPackageName) {
+ final int callingUid = Binder.getCallingUid();
+ final int userId = UserHandle.getCallingUserId();
final FunctionalUtils.ThrowingBiFunction<PackageStateMutator.InitialState, Computer,
PackageStateMutator.Result> implementation = (initialState, computer) -> {
- if (computer.getInstantAppPackageName(Binder.getCallingUid()) != null) {
+ if (computer.getInstantAppPackageName(callingUid) != null) {
throw new SecurityException(
"Instant applications don't have access to this method");
}
- mInjector.getSystemService(AppOpsManager.class)
- .checkPackage(Binder.getCallingUid(), callerPackageName);
+ final int callerPackageUid = computer.getPackageUid(callerPackageName, 0, userId);
+ if (callerPackageUid != callingUid) {
+ throw new SecurityException(
+ "Package " + callerPackageName + " does not belong to " + callingUid);
+ }
PackageStateInternal packageState = computer.getPackageStateForInstalledAndFiltered(
- packageName, Binder.getCallingUid(), UserHandle.getCallingUserId());
+ packageName, callingUid, userId);
if (packageState == null) {
throw new IllegalArgumentException("Unknown target package " + packageName);
}