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

Commit 16af3e02 authored by Anthony Stange's avatar Anthony Stange Committed by Cherrypicker Worker
Browse files

Add removeInstanceForPackageMethod to SensorManager

In order to ensure that clients don't leak their sensor manager
instance that we currently store in a static map, they need to be able
to remove their instance. Otherwise, this instance is never removed from
the list and will hang around until our SensorManage instance is
destroyed.

Bug: 269014004
Test: Run ./libsensorserviceaidl_fuzzer
Change-Id: I52185f74ae8d28b379440235ca6f03c5089081f5
(cherry picked from commit 9532f7c6)
Merged-In: I52185f74ae8d28b379440235ca6f03c5089081f5
parent cf83b16a
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -92,6 +92,16 @@ SensorManager& SensorManager::getInstanceForPackage(const String16& packageName)
    return *sensorManager;
}

void SensorManager::removeInstanceForPackage(const String16& packageName) {
    Mutex::Autolock _l(sLock);
    auto iterator = sPackageInstances.find(packageName);
    if (iterator != sPackageInstances.end()) {
        SensorManager* sensorManager = iterator->second;
        delete sensorManager;
        sPackageInstances.erase(iterator);
    }
}

SensorManager::SensorManager(const String16& opPackageName)
    : mSensorList(nullptr), mOpPackageName(opPackageName), mDirectConnectionHandle(1) {
    Mutex::Autolock _l(mLock);
+1 −0
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@ class SensorManager : public ASensorManager
{
public:
    static SensorManager& getInstanceForPackage(const String16& packageName);
    static void removeInstanceForPackage(const String16& packageName);
    ~SensorManager();

    ssize_t getSensorList(Sensor const* const** list);
+3 −0
Original line number Diff line number Diff line
@@ -60,6 +60,9 @@ SensorManager::~SensorManager() {
    if (mPollThread.joinable()) {
        mPollThread.join();
    }

    ::android::SensorManager::removeInstanceForPackage(
            String16(ISensorManager::descriptor));
}

// Methods from ::android::frameworks::sensorservice::V1_0::ISensorManager follow.