Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 47a7a4a9 authored by Rocky Fang's avatar Rocky Fang
Browse files

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
parent 0b80ad60
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -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;
    }

+10 −2
Original line number Diff line number Diff line
@@ -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. */