From 00c05eb24143bc593a575f5604c266793bba399a Mon Sep 17 00:00:00 2001 From: Hai Zhang Date: Fri, 6 Sep 2019 16:47:42 -0700 Subject: [PATCH] Disable HistoricalOps API if permission hub isn't enabled. Bug: 140431380 Test: adb shell cmd stats pull-source 10060 Test: atest HistoricalAppopsTest fails without ag/9362355 Test: atest HistoricalAppopsTest passes with ag/9362355 Change-Id: I16345b1f885ed5b9e83abb37e3406186aee43375 --- .../server/appop/HistoricalRegistry.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/services/core/java/com/android/server/appop/HistoricalRegistry.java b/services/core/java/com/android/server/appop/HistoricalRegistry.java index ace0a7d03b856..5983785d42470 100644 --- a/services/core/java/com/android/server/appop/HistoricalRegistry.java +++ b/services/core/java/com/android/server/appop/HistoricalRegistry.java @@ -28,6 +28,7 @@ import android.app.AppOpsManager.UidState; import android.content.ContentResolver; import android.database.ContentObserver; import android.net.Uri; +import android.os.Binder; import android.os.Build; import android.os.Bundle; import android.os.Debug; @@ -36,6 +37,7 @@ import android.os.Message; import android.os.Process; import android.os.RemoteCallback; import android.os.UserHandle; +import android.provider.DeviceConfig; import android.provider.Settings; import android.util.ArraySet; import android.util.LongSparseArray; @@ -44,6 +46,7 @@ import android.util.TimeUtils; import android.util.Xml; import com.android.internal.annotations.GuardedBy; +import com.android.internal.config.sysui.SystemUiDeviceConfigFlags; import com.android.internal.os.AtomicDirectory; import com.android.internal.os.BackgroundThread; import com.android.internal.util.ArrayUtils; @@ -272,6 +275,10 @@ final class HistoricalRegistry { void dump(String prefix, PrintWriter pw, int filterUid, String filterPackage, int filterOp) { + if (!isApiEnabled()) { + return; + } + synchronized (mOnDiskLock) { synchronized (mInMemoryLock) { pw.println(); @@ -324,6 +331,11 @@ final class HistoricalRegistry { void getHistoricalOpsFromDiskRaw(int uid, @NonNull String packageName, @Nullable String[] opNames, long beginTimeMillis, long endTimeMillis, @OpFlags int flags, @NonNull RemoteCallback callback) { + if (!isApiEnabled()) { + callback.sendResult(new Bundle()); + return; + } + synchronized (mOnDiskLock) { synchronized (mInMemoryLock) { if (!isPersistenceInitializedMLocked()) { @@ -344,6 +356,11 @@ final class HistoricalRegistry { void getHistoricalOps(int uid, @NonNull String packageName, @Nullable String[] opNames, long beginTimeMillis, long endTimeMillis, @OpFlags int flags, @NonNull RemoteCallback callback) { + if (!isApiEnabled()) { + callback.sendResult(new Bundle()); + return; + } + final long currentTimeMillis = System.currentTimeMillis(); if (endTimeMillis == Long.MAX_VALUE) { endTimeMillis = currentTimeMillis; @@ -681,6 +698,12 @@ final class HistoricalRegistry { } } + private static boolean isApiEnabled() { + return Binder.getCallingUid() == Process.myUid() + || DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY, + SystemUiDeviceConfigFlags.PROPERTY_PERMISSIONS_HUB_ENABLED, false); + } + private static final class Persistence { private static final boolean DEBUG = false;