From a55382393eb42e3575e8f44737b3a369d9a87250 Mon Sep 17 00:00:00 2001 From: Anh Pham Date: Wed, 23 Jun 2021 08:41:11 +0200 Subject: Use IServiceManager method to check app permission The current SensorService implementation uses PermissionCache to check if the calling app has the normal permission HIGH_SAMPLING_RATE_SENSORS. However, PermissionCache is not safe for normal permission because the cache is not updated when there is a permission change (e.g., the case discussed in b/190350124). Bug: 190350124 Test: atest CtsSensorTestCases CtsSensorRatePermissionTestCases Test: Wrote a test app and verified that permission change was correctly checked by the SensorService. Change-Id: I1acb32c59dafa1f5973553e3969666a8d2a4412a --- services/sensorservice/SensorService.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp index 228172140b..726fe8ea84 100644 --- a/services/sensorservice/SensorService.cpp +++ b/services/sensorservice/SensorService.cpp @@ -2161,8 +2161,9 @@ bool SensorService::isUidActive(uid_t uid) { bool SensorService::isRateCappedBasedOnPermission(const String16& opPackageName) { int targetSdk = getTargetSdkVersion(opPackageName); - bool hasSamplingRatePermission = PermissionCache::checkCallingPermission( - sAccessHighSensorSamplingRatePermission); + bool hasSamplingRatePermission = checkPermission(sAccessHighSensorSamplingRatePermission, + IPCThreadState::self()->getCallingPid(), + IPCThreadState::self()->getCallingUid()); if (targetSdk < __ANDROID_API_S__ || (targetSdk >= __ANDROID_API_S__ && hasSamplingRatePermission)) { return false; -- cgit v1.2.3-59-g8ed1b