diff options
author | 2023-12-11 22:30:30 +0000 | |
---|---|---|
committer | 2023-12-12 00:43:21 +0000 | |
commit | 47a7a4a99f4c795d00dfd2833e16f148c0052da5 (patch) | |
tree | cf07cc39f80e5112599f47278902c7f4e79e85ad | |
parent | 0b80ad607f48843ca638a06716d72815e6547f9b (diff) |
Skip get target SDK for VNDK client on aidl
Fixes: 312759669
Test: Error log not shown after starting camera app (adb logcat -s
JavaBinder: E)
Change-Id: Iaee72a7bcda19d81cd3fb84c178a57c6d42e5eea
-rw-r--r-- | services/sensorservice/SensorService.cpp | 12 | ||||
-rw-r--r-- | services/sensorservice/aidl/SensorManager.cpp | 12 |
2 files changed, 17 insertions, 7 deletions
diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp index 44d0d708e0..85043c9038 100644 --- a/services/sensorservice/SensorService.cpp +++ b/services/sensorservice/SensorService.cpp @@ -91,7 +91,7 @@ bool SensorService::sHmacGlobalKeyIsValid = false; std::map<String16, int> SensorService::sPackageTargetVersion; Mutex SensorService::sPackageTargetVersionLock; String16 SensorService::sSensorInterfaceDescriptorPrefix = - String16("android.frameworks.sensorservice@"); + String16("android.frameworks.sensorservice"); AppOpsManager SensorService::sAppOpsManager; std::atomic_uint64_t SensorService::curProxCallbackSeq(0); std::atomic_uint64_t SensorService::completedCallbackSeq(0); @@ -2295,10 +2295,12 @@ bool SensorService::hasPermissionForSensor(const Sensor& sensor) { } int SensorService::getTargetSdkVersion(const String16& opPackageName) { - // Don't query the SDK version for the ISensorManager descriptor as it doesn't have one. This - // descriptor tends to be used for VNDK clients, but can technically be set by anyone so don't - // give it elevated privileges. - if (opPackageName.startsWith(sSensorInterfaceDescriptorPrefix)) { + // Don't query the SDK version for the ISensorManager descriptor as it + // doesn't have one. This descriptor tends to be used for VNDK clients, but + // can technically be set by anyone so don't give it elevated privileges. + bool isVNDK = opPackageName.startsWith(sSensorInterfaceDescriptorPrefix) && + opPackageName.contains(String16("@")); + if (isVNDK) { return -1; } diff --git a/services/sensorservice/aidl/SensorManager.cpp b/services/sensorservice/aidl/SensorManager.cpp index 2b6ea7cef1..b6acc8a572 100644 --- a/services/sensorservice/aidl/SensorManager.cpp +++ b/services/sensorservice/aidl/SensorManager.cpp @@ -188,8 +188,16 @@ ndk::ScopedAStatus SensorManagerAidl::getSensorList(std::vector<SensorInfo>* _ai } ::android::SensorManager& SensorManagerAidl::getInternalManager() { - return ::android::SensorManager::getInstanceForPackage( - String16(ISensorManager::descriptor)); + int32_t version; + ndk::ScopedAStatus status = getInterfaceVersion(&version); + if (!status.isOk()) { + LOG(ERROR) << "Failed to get interface version with error: " + << status.getDescription(); + version = -1; + } + String16 packageName = String16(ISensorManager::descriptor); + packageName += String16("@") + String16(std::to_string(version).c_str()); + return ::android::SensorManager::getInstanceForPackage(packageName); } /* One global looper for all event queues created from this SensorManager. */ |