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
diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp
index 2281721..726fe8e 100644
--- a/services/sensorservice/SensorService.cpp
+++ b/services/sensorservice/SensorService.cpp
@@ -2161,8 +2161,9 @@
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;