From a3e3f3438806f3c8fb94f9e087c7b3264b94d6b6 Mon Sep 17 00:00:00 2001 From: li-tiangang4 Date: Wed, 31 Jul 2024 14:40:27 +0800 Subject: [PATCH] =?UTF-8?q?dlopen=E6=96=87=E4=BB=B6=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=E5=89=8D=EF=BC=8C=E5=AF=B9=E5=85=B6=E8=BF=9B=E8=A1=8C=E8=A7=84?= =?UTF-8?q?=E8=8C=83=E5=8C=96=E5=B9=B6=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: li-tiangang4 --- .../src/componentloader/component_loader.cpp | 9 ++++++--- utils/src/histreamer_query_tool.cpp | 6 ++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/services/distributedhardwarefwkservice/src/componentloader/component_loader.cpp b/services/distributedhardwarefwkservice/src/componentloader/component_loader.cpp index 1e48f281..7c996edb 100644 --- a/services/distributedhardwarefwkservice/src/componentloader/component_loader.cpp +++ b/services/distributedhardwarefwkservice/src/componentloader/component_loader.cpp @@ -365,11 +365,14 @@ void ComponentLoader::StoreLocalDHVersionInDB() void *ComponentLoader::GetHandler(const std::string &soName) { - if (soName.length() == 0 || soName.length() > PATH_MAX) { - DHLOGE("File canonicalization failed, soName: %{public}s", soName.c_str()); + char path[PATH_MAX + 1] = {0x00}; + if (soName.length() == 0 || soName.length() > PATH_MAX || realpath(soName.c_str(), path) == nullptr) { + std::string loadPath(path); + DHLOGE("File canonicalization failed, soName: %{public}s, loadPath:%{public}s", soName.c_str(), + loadPath.c_str()); return nullptr; } - void *pHandler = dlopen(soName.c_str(), RTLD_LAZY | RTLD_NODELETE); + void *pHandler = dlopen(path, RTLD_LAZY | RTLD_NODELETE); if (pHandler == nullptr) { DHLOGE("so: %{public}s load failed, failed reason: %{public}s", soName.c_str(), dlerror()); HiSysEventWriteMsg(DHFWK_INIT_FAIL, OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, diff --git a/utils/src/histreamer_query_tool.cpp b/utils/src/histreamer_query_tool.cpp index 86a6ff5d..cf21cf13 100644 --- a/utils/src/histreamer_query_tool.cpp +++ b/utils/src/histreamer_query_tool.cpp @@ -48,6 +48,12 @@ void HiStreamerQueryTool::Init() return; } DHLOGI("Start Init HiStreamer Query SO"); + char path[PATH_MAX + 1] = {0x00}; + if (LOAD_SO.length() == 0 || LOAD_SO.length() > PATH_MAX || realpath(LOAD_SO.c_str(), path) == nullptr) { + std::string loadPath(path); + DHLOGE("File canonicalization failed, loadPath: %{public}s", loadPath.c_str()); + return; + } void *pHandler = dlopen(LOAD_SO.c_str(), RTLD_LAZY | RTLD_NODELETE); if (pHandler == nullptr) { DHLOGE("libhistreamer_ability_querier.z.so handler load failed, failed reason : %{public}s", dlerror()); -- Gitee