From d063721aadc2cc5747b81e944c6f1a4f4ca4b912 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BF=A0=E9=BD=90?= Date: Thu, 19 Jun 2025 23:02:15 +0800 Subject: [PATCH] =?UTF-8?q?JSVM=20=E9=80=82=E9=85=8D=E5=9D=9A=E7=9B=BE?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E6=9F=A5=E8=AF=A2API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 王忠齐 --- src/platform/platform_ohos.cpp | 36 ++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/src/platform/platform_ohos.cpp b/src/platform/platform_ohos.cpp index c1a9357..02aaede 100644 --- a/src/platform/platform_ohos.cpp +++ b/src/platform/platform_ohos.cpp @@ -22,11 +22,13 @@ #include "hilog/log.h" #include "hitrace_meter.h" #include "init_param.h" +#include "jsvm_log.h" #include "res_sched_client.h" #include "unistd.h" #ifdef ENABLE_HISYSEVENT #include "hisysevent.h" #endif +#include #include #include #include @@ -188,22 +190,40 @@ void ReportKeyThread(ThreadRole role) } #endif -inline bool ReadSystemXpmState() +bool ReadAdvancedSecurityMode() { - constexpr size_t argBuffSize = 32; - char buffer[argBuffSize] = { 0 }; - uint32_t buffSize = sizeof(buffer); + void *hdl = dlopen("/system/lib64/platformsdk/libdsmm_innersdk.z.so", RTLD_LAZY); + if (!hdl) { + LOG(Error) << "[AdvancedSecurityMode]: dlopen failed"; + return false; + } - if (SystemGetParameter("ohos.boot.advsecmode.state", buffer, &buffSize) == 0 && strcmp(buffer, "0") != 0) { - return true; + using AdvSecModeGetPtr = int32_t (*)(const char *feature, uint32_t featureLen, + const char *param, uint32_t paramLen, uint32_t *state); + AdvSecModeGetPtr func = reinterpret_cast(dlsym(hdl, "AdvancedSecurityModeGetStateByFeature")); + if (!func) { + LOG(Error) << "[AdvancedSecurityMode]: dlsym failed"; + dlclose(hdl); + return false; + } + + const char* featureName = "RESTRICTED_JSVM_FEATURES"; + const char* emptyParam = "{}"; + uint32_t state = 0; + int32_t ret = func(featureName, strlen(featureName), emptyParam, strlen(emptyParam), &state); + dlclose(hdl); + + if (ret != 0) { + LOG(Error) << "[AdvancedSecurityMode]: AdvSecModeGetPtr failed"; + return false; } - return false; + return static_cast(state); } void SetSecurityMode() { constexpr size_t secArgCnt = 2; - if (ReadSystemXpmState() || !HasJitfortACL()) { + if (ReadAdvancedSecurityMode() || !HasJitfortACL()) { isJitMode = false; int secArgc = secArgCnt; constexpr bool removeFlag = false; -- Gitee