diff options
| author | 2024-04-10 17:14:42 +0000 | |
|---|---|---|
| committer | 2024-04-10 17:14:42 +0000 | |
| commit | db03730bb962bc5f26004f256e5b4f8c99247e40 (patch) | |
| tree | c46ea4d1d546ea6c3ec53cdb0a331ed88f708265 | |
| parent | de5f1bae6aa9bc09d05e06bef99ad7a22edfa557 (diff) | |
| parent | cef1aed9bde9dc050bdb699af54b07953a04fdef (diff) | |
Merge "[pm] fix a deadlock" into main
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 13 |
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); } |