summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Pawan Wagh <waghpawan@google.com> 2022-09-20 19:37:35 +0000
committer Pawan Wagh <waghpawan@google.com> 2022-09-20 19:47:25 +0000
commit243888ecb09aff6234a86c2ade25d9c5abec411d (patch)
tree55a8d879583c488930ec67223a389e2e6248a222
parente583df86038451c8a60b2b943f403cc294ae5c97 (diff)
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
-rw-r--r--cmds/servicemanager/ServiceManager.cpp6
-rw-r--r--cmds/servicemanager/ServiceManager.h6
-rw-r--r--cmds/servicemanager/ServiceManagerFuzzer.cpp1
3 files changed, 13 insertions, 0 deletions
diff --git a/cmds/servicemanager/ServiceManager.cpp b/cmds/servicemanager/ServiceManager.cpp
index 3cfe5297ca..07273835f9 100644
--- a/cmds/servicemanager/ServiceManager.cpp
+++ b/cmds/servicemanager/ServiceManager.cpp
@@ -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
diff --git a/cmds/servicemanager/ServiceManager.h b/cmds/servicemanager/ServiceManager.h
index 5e403194d7..c6db697a89 100644
--- a/cmds/servicemanager/ServiceManager.h
+++ b/cmds/servicemanager/ServiceManager.h
@@ -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);
diff --git a/cmds/servicemanager/ServiceManagerFuzzer.cpp b/cmds/servicemanager/ServiceManagerFuzzer.cpp
index 39f8522f84..b76a6bd3cd 100644
--- a/cmds/servicemanager/ServiceManagerFuzzer.cpp
+++ b/cmds/servicemanager/ServiceManagerFuzzer.cpp
@@ -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;
}