From edeba52845843d732549de34ab7bc1aa3e968135 Mon Sep 17 00:00:00 2001 From: Stanislav Zholnin Date: Sat, 6 Mar 2021 18:20:36 +0000 Subject: [PATCH] Enable HistoricalRegistry API and getHistoricalOps for self-requests. Fix: 180647319 Test: manually verified Change-Id: Ic49aa10ff8547b0252e0460307343348aeb7fa91 --- .../android/server/appop/AppOpsService.java | 36 ++++++++++--------- .../server/appop/HistoricalRegistry.java | 2 +- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/services/core/java/com/android/server/appop/AppOpsService.java b/services/core/java/com/android/server/appop/AppOpsService.java index 11125dd556658..e49003d647a77 100644 --- a/services/core/java/com/android/server/appop/AppOpsService.java +++ b/services/core/java/com/android/server/appop/AppOpsService.java @@ -2104,26 +2104,28 @@ public class AppOpsService extends IAppOpsService.Stub { ensureHistoricalOpRequestIsValid(uid, packageName, attributionTag, opNames, filter, beginTimeMillis, endTimeMillis, flags); Objects.requireNonNull(callback, "callback cannot be null"); - 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; - } + boolean isSelfRequest = (filter & FILTER_BY_UID) != 0 && uid == Binder.getCallingUid(); + if (!isSelfRequest) { + 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 && !isCallerPermissionController) { - mHandler.post(() -> callback.sendResult(new Bundle())); - return; - } + if (!isCallerSystem && !isCallerInstrumented && !isCallerPermissionController) { + mHandler.post(() -> callback.sendResult(new Bundle())); + return; + } - mContext.enforcePermission(android.Manifest.permission.GET_APP_OPS_STATS, - Binder.getCallingPid(), Binder.getCallingUid(), "getHistoricalOps"); + mContext.enforcePermission(android.Manifest.permission.GET_APP_OPS_STATS, + Binder.getCallingPid(), Binder.getCallingUid(), "getHistoricalOps"); + } final String[] opNamesArray = (opNames != null) ? opNames.toArray(new String[opNames.size()]) : null; diff --git a/services/core/java/com/android/server/appop/HistoricalRegistry.java b/services/core/java/com/android/server/appop/HistoricalRegistry.java index 1c43fedd31121..a7ba9ebeb805b 100644 --- a/services/core/java/com/android/server/appop/HistoricalRegistry.java +++ b/services/core/java/com/android/server/appop/HistoricalRegistry.java @@ -771,7 +771,7 @@ final class HistoricalRegistry { private static boolean isApiEnabled() { return Binder.getCallingUid() == Process.myUid() || DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY, - PROPERTY_PERMISSIONS_HUB_ENABLED, false); + PROPERTY_PERMISSIONS_HUB_ENABLED, true); } private static final class Persistence {