From 8124efd57b50056d22e1b63c32c366ebdf049598 Mon Sep 17 00:00:00 2001 From: yawanng Date: Mon, 8 Feb 2021 22:38:28 +0000 Subject: [PATCH] Adds caller check to getAllPackages() This change enforces that only system, root or shell may call getAllPackages(), a hidden API that shares all package names regardless of user, instant app or package visibility rules. The only exception is the uid of iorapd. iorapd needs the package info to prefetch the right data. Bug: 179618216 Bug: 174661955 Test: run iorapd and check it works well. Change-Id: I77460ae19a4d41151577646441f11e2eddbb741a --- core/java/android/os/Process.java | 6 ++++++ .../java/com/android/server/pm/PackageManagerService.java | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java index 39e3e146f45b4..a62d95117f8e8 100644 --- a/core/java/android/os/Process.java +++ b/core/java/android/os/Process.java @@ -206,6 +206,12 @@ public class Process { */ public static final int SE_UID = 1068; + /** + * Defines the UID/GID for the iorapd. + * @hide + */ + public static final int IORAPD_UID = 1071; + /** * Defines the UID/GID for the NetworkStack app. * @hide diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 198fe58b5616a..9a62f8a111ea6 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -8940,6 +8940,10 @@ public class PackageManagerService extends IPackageManager.Stub @Override public List getAllPackages() { + // Allow iorapd to call this method. + if (Binder.getCallingUid() != Process.IORAPD_UID) { + enforceSystemOrRootOrShell("getAllPackages is limited to privileged callers"); + } final int callingUid = Binder.getCallingUid(); final int callingUserId = UserHandle.getUserId(callingUid); synchronized (mLock) {