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

Commit 243888ec authored by Pawan Wagh's avatar Pawan Wagh
Browse files

servicemanager : Adding clear API to ServiceManager

Adding an API to clear members of ServiceManager. Using it in
ServiceManagerFuzzer to avoid indirect leaks.

BUG: 240481296
Test: m servicemanager_fuzzer && $ANDROID_HOST_OUT/fuzz/x86_64/servicemanager_fuzzer/servicemanager_fuzzer
Change-Id: Ifda8d81981a1143e08c80436ac80d74fcbe14318
parent e583df86
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -762,4 +762,10 @@ Status ServiceManager::getServiceDebugInfo(std::vector<ServiceDebugInfo>* outRet
    return Status::ok();
}

void ServiceManager::clear() {
    mNameToService.clear();
    mNameToRegistrationCallback.clear();
    mNameToClientCallback.clear();
}

}  // namespace android
+6 −0
Original line number Diff line number Diff line
@@ -58,6 +58,12 @@ public:
    void binderDied(const wp<IBinder>& who) override;
    void handleClientCallbacks();

    /**
     *  This API is added for debug purposes. It clears members which hold service and callback
     * information.
     */
    void clear();

protected:
    virtual void tryStartService(const std::string& name);

+1 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
    auto accessPtr = std::make_unique<Access>();
    auto serviceManager = sp<ServiceManager>::make(std::move(accessPtr));
    fuzzService(serviceManager, FuzzedDataProvider(data, size));
    serviceManager->clear();

    return 0;
}