From dbac29e44f10148d6233ced4a0161277a71e343e Mon Sep 17 00:00:00 2001 From: "Philip P. Moltmann" Date: Tue, 30 Jun 2020 17:33:25 -0700 Subject: [PATCH] Allow perm controller to read historical app-op data Bug: 161007415 Test: built Change-Id: I600862708dee58f947270fa25cb0cd6e3c6a0317 --- .../java/com/android/server/appop/AppOpsService.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/appop/AppOpsService.java b/services/core/java/com/android/server/appop/AppOpsService.java index 6eab0221b7abc..c5bdb9edd069c 100644 --- a/services/core/java/com/android/server/appop/AppOpsService.java +++ b/services/core/java/com/android/server/appop/AppOpsService.java @@ -2052,6 +2052,8 @@ public class AppOpsService extends IAppOpsService.Stub { public void getHistoricalOps(int uid, String packageName, String attributionTag, List opNames, int filter, long beginTimeMillis, long endTimeMillis, int flags, RemoteCallback callback) { + PackageManager pm = mContext.getPackageManager(); + ensureHistoricalOpRequestIsValid(uid, packageName, attributionTag, opNames, filter, beginTimeMillis, endTimeMillis, flags); Objects.requireNonNull(callback, "callback cannot be null"); @@ -2059,8 +2061,16 @@ public class AppOpsService extends IAppOpsService.Stub { ActivityManagerInternal ami = LocalServices.getService(ActivityManagerInternal.class); boolean isCallerInstrumented = ami.isUidCurrentlyInstrumented(Binder.getCallingUid()); boolean isCallerSystem = Binder.getCallingPid() == Process.myPid(); + boolean isCallerPermissionController; + try { + isCallerPermissionController = pm.getPackageUid( + mContext.getPackageManager().getPermissionControllerPackageName(), 0) + == Binder.getCallingUid(); + } catch (PackageManager.NameNotFoundException doesNotHappen) { + return; + } - if (!isCallerSystem && !isCallerInstrumented) { + if (!isCallerSystem && !isCallerInstrumented && !isCallerPermissionController) { mHandler.post(() -> callback.sendResult(new Bundle())); return; }