diff options
author | Brian Duddie <bduddie@google.com> | 2022-05-23 17:47:50 -0700 |
---|---|---|
committer | Brian Duddie <bduddie@google.com> | 2022-08-17 15:57:19 +0000 |
commit | 0d4ac562fbf70ea385de91a3e56bd4183f00052e (patch) | |
tree | a9300df4452c3e591d44f843b267a2c2af453369 | |
parent | 820db998c871017e2715e3ed21b8be90ae0ad271 (diff) | |
download | native-0d4ac562fbf70ea385de91a3e56bd4183f00052e.tar.gz |
Reset target SDK version cache on new connection
Avoids possibility that a stale cache is used if cleanupConnection()
does not get called for some reason.
Bug: 230358834
Test: run POC from b/230358834#comment4
Change-Id: I2e7422d90cec87167968d56458af9aac6d525506
-rw-r--r-- | services/sensorservice/SensorService.cpp | 19 | ||||
-rw-r--r-- | services/sensorservice/SensorService.h | 1 |
2 files changed, 12 insertions, 8 deletions
diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp index 948692bd47..e0a4f034cb 100644 --- a/services/sensorservice/SensorService.cpp +++ b/services/sensorservice/SensorService.cpp @@ -1328,6 +1328,7 @@ Vector<Sensor> SensorService::getSensorList(const String16& opPackageName) { mSensors.getUserDebugSensors() : mSensors.getUserSensors(); Vector<Sensor> accessibleSensorList; + resetTargetSdkVersionCache(opPackageName); bool isCapped = isRateCappedBasedOnPermission(opPackageName); for (size_t i = 0; i < initialSensorList.size(); i++) { Sensor sensor = initialSensorList[i]; @@ -1367,6 +1368,7 @@ sp<ISensorEventConnection> SensorService::createSensorEventConnection(const Stri if (requestedMode != NORMAL && requestedMode != DATA_INJECTION) { return nullptr; } + resetTargetSdkVersionCache(opPackageName); Mutex::Autolock _l(mLock); // To create a client in DATA_INJECTION mode to inject data, SensorService should already be @@ -1402,6 +1404,7 @@ int SensorService::isDataInjectionEnabled() { sp<ISensorEventConnection> SensorService::createSensorDirectConnection( const String16& opPackageName, uint32_t size, int32_t type, int32_t format, const native_handle *resource) { + resetTargetSdkVersionCache(opPackageName); ConnectionSafeAutolock connLock = mConnectionHolder.lock(mLock); // No new direct connections are allowed when sensor privacy is enabled @@ -1643,14 +1646,6 @@ void SensorService::cleanupConnection(SensorEventConnection* c) { checkWakeLockStateLocked(&connLock); } - { - Mutex::Autolock packageLock(sPackageTargetVersionLock); - auto iter = sPackageTargetVersion.find(c->mOpPackageName); - if (iter != sPackageTargetVersion.end()) { - sPackageTargetVersion.erase(iter); - } - } - SensorDevice& dev(SensorDevice::getInstance()); dev.notifyConnectionDestroyed(c); } @@ -2091,6 +2086,14 @@ int SensorService::getTargetSdkVersion(const String16& opPackageName) { return targetSdkVersion; } +void SensorService::resetTargetSdkVersionCache(const String16& opPackageName) { + Mutex::Autolock packageLock(sPackageTargetVersionLock); + auto iter = sPackageTargetVersion.find(opPackageName); + if (iter != sPackageTargetVersion.end()) { + sPackageTargetVersion.erase(iter); + } +} + void SensorService::checkWakeLockState() { ConnectionSafeAutolock connLock = mConnectionHolder.lock(mLock); checkWakeLockStateLocked(&connLock); diff --git a/services/sensorservice/SensorService.h b/services/sensorservice/SensorService.h index 234dc9cd7d..4ba3c51985 100644 --- a/services/sensorservice/SensorService.h +++ b/services/sensorservice/SensorService.h @@ -377,6 +377,7 @@ private: const String16& opPackageName); static bool hasPermissionForSensor(const Sensor& sensor); static int getTargetSdkVersion(const String16& opPackageName); + static void resetTargetSdkVersionCache(const String16& opPackageName); // SensorService acquires a partial wakelock for delivering events from wake up sensors. This // method checks whether all the events from these wake up sensors have been delivered to the // corresponding applications, if yes the wakelock is released. |