From 5a501438e583242cadfe28b9503783fb19e5f196 Mon Sep 17 00:00:00 2001 From: zhuofan0129 <861080528@qq.com> Date: Tue, 9 Jul 2024 09:57:51 +0800 Subject: [PATCH] feat: Add jitfort enable interface Signed-off-by: zhuofan0129 <861080528@qq.com> --- .../include/code_sign_attr_utils.h | 2 ++ .../src/code_sign_attr_utils.c | 21 +++++++++++++++++++ test/unittest/BUILD.gn | 10 +++++++-- test/unittest/jit_code_sign_test.cpp | 10 ++------- 4 files changed, 33 insertions(+), 10 deletions(-) diff --git a/interfaces/innerkits/code_sign_attr_utils/include/code_sign_attr_utils.h b/interfaces/innerkits/code_sign_attr_utils/include/code_sign_attr_utils.h index 190a511..3d91a48 100755 --- a/interfaces/innerkits/code_sign_attr_utils/include/code_sign_attr_utils.h +++ b/interfaces/innerkits/code_sign_attr_utils/include/code_sign_attr_utils.h @@ -76,6 +76,8 @@ int InitXpmRegion(void); int SetXpmOwnerId(uint32_t idType, const char *ownerId); +int InitJitfort(void); + #ifdef __cplusplus } #endif diff --git a/interfaces/innerkits/code_sign_attr_utils/src/code_sign_attr_utils.c b/interfaces/innerkits/code_sign_attr_utils/src/code_sign_attr_utils.c index 100b0eb..2a64e5e 100755 --- a/interfaces/innerkits/code_sign_attr_utils/src/code_sign_attr_utils.c +++ b/interfaces/innerkits/code_sign_attr_utils/src/code_sign_attr_utils.c @@ -20,6 +20,7 @@ #include #include #include +#include #include "errcode.h" #include "log.h" @@ -28,6 +29,12 @@ #define XPM_SET_REGION _IOW('x', 0x01, struct XpmConfig) #define XPM_SET_OWNERID _IOW('x', 0x02, struct XpmConfig) +#define XPM_SET_JITFORT_ENABLE _IOW('x', 0x3, unsigned long) + +#define JITFORT_PRCTL_OPTION 0x6a6974 +#define JITFORT_SWITCH_IN 3 +#define JITFORT_SWITCH_OUT 4 +#define JITFORT_INIT 5 static int XpmIoctl(uint32_t cmd, struct XpmConfig *config) { @@ -57,6 +64,20 @@ int InitXpmRegion(void) return XpmIoctl(XPM_SET_REGION, &config); } +int InitJitfort(void) +{ + int rc = XpmIoctl(XPM_SET_JITFORT_ENABLE, NULL); + if (rc != 0) { + return CS_ERR_UNSUPPORT; + } + rc = prctl(JITFORT_PRCTL_OPTION, JITFORT_INIT, 0); + if (rc != 0) { + LOG_ERROR("Failed to init jitfort resource, rc = %{public}d", rc); + return CS_ERR_UNSUPPORT; + } + return CS_SUCCESS; +} + int SetXpmOwnerId(uint32_t idType, const char *ownerId) { struct XpmConfig config = {0}; diff --git a/test/unittest/BUILD.gn b/test/unittest/BUILD.gn index 6e55182..9b144ef 100644 --- a/test/unittest/BUILD.gn +++ b/test/unittest/BUILD.gn @@ -277,8 +277,14 @@ ohos_unittest("jit_code_sign_unittest") { cfi_cross_dso = true debug = false } - deps = [ "${code_signature_root_dir}/interfaces/innerkits/jit_code_sign:libjit_code_sign" ] - external_deps = [ "c_utils:utils" ] + deps = [ + "${code_signature_root_dir}/interfaces/innerkits/code_sign_attr_utils:libcode_sign_attr_utils", + "${code_signature_root_dir}/interfaces/innerkits/jit_code_sign:libjit_code_sign", + ] + external_deps = [ + "c_utils:utils", + "hilog:libhilog", + ] subsystem_name = "security" part_name = "code_signature" } diff --git a/test/unittest/jit_code_sign_test.cpp b/test/unittest/jit_code_sign_test.cpp index e50afa4..65fe080 100644 --- a/test/unittest/jit_code_sign_test.cpp +++ b/test/unittest/jit_code_sign_test.cpp @@ -27,6 +27,7 @@ #include "errcode.h" #include "jit_code_signer_factory.h" #include "jit_buffer_integrity.h" +#include "code_sign_attr_utils.h" #include "pac_sign_ctx.h" namespace OHOS { @@ -102,17 +103,10 @@ static inline void AllocJitMemory() EXPECT_NE(g_jitMemory, MAP_FAILED); } -void XPMEnableJitFort() -{ - int fd = open(XPM_DEV_PATH.c_str(), O_RDWR); - EXPECT_GE(fd, 0); - EXPECT_GE(ioctl(fd, XPM_SET_JITFORT_ENABLE, 0), 0); -} - static inline void JitFortPrepare() { #ifndef JIT_FORT_DISABLE - XPMEnableJitFort(); + InitJitfort(); PrctlWrapper(JITFORT_PRCTL_OPTION, JITFORT_CREATE_COPGTABLE); #endif } -- Gitee