diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java index a4077fbee892e..a89aefaa8c5bd 100644 --- a/core/java/android/os/Process.java +++ b/core/java/android/os/Process.java @@ -202,6 +202,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 18f2655dc2d6a..6b53fc5838a31 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -6169,6 +6169,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) {