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

Commit 781b4ff1 authored by Kelvin Zhang's avatar Kelvin Zhang
Browse files

Check if AIDL service is declared before calling wait

If bootctl AIDL service is not installed and we call waitForService,
caller will block indefinitely. So check with
AServiceManager_isDeclared before calling waitForService.

Test: th
Bug: 227536004
Change-Id: I551040b222c6c9127fe79aceb36bb3d69b52c3b6
parent a5468b51
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -327,9 +327,14 @@ std::unique_ptr<BootControlClient> BootControlClient::WaitForService() {
    const auto instance_name =
            std::string(::aidl::android::hardware::boot::IBootControl::descriptor) + "/default";

    if (auto module = ::aidl::android::hardware::boot::IBootControl::fromBinder(
    if (AServiceManager_isDeclared(instance_name.c_str())) {
        auto module = ::aidl::android::hardware::boot::IBootControl::fromBinder(
                ndk::SpAIBinder(AServiceManager_waitForService(instance_name.c_str())));
        module != nullptr) {
        if (module == nullptr) {
            LOG(ERROR) << "AIDL " << instance_name
                       << " is declared but waitForService returned nullptr.";
            return nullptr;
        }
        LOG(INFO) << "Using AIDL version of IBootControl";
        return std::make_unique<BootControlClientAidl>(module);
    }