From 5e0898d35da7119b52929363579169d6fc106095 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 (cherry picked from commit 8124efd57b50056d22e1b63c32c366ebdf049598) --- 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 34664a4085e55..feabd06acb8b3 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 40723e073ba10..db2bf5ea14bac 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -6178,6 +6178,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) {