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 190a51191bc2e5a16f993afc62ee7600fbb91dec..3d91a4874cbcd26870fa592ea46a589b82c3d74d 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 100b0eb8e0d3ebeb28159bab2317396cee1b22c2..2a64e5ee34d1c935dffc5d6cde91ed8a2879f93b 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 6e55182a1a2b056038ba25301c84fa85eefa58da..9b144ef74f6da132b6277b92c017e705c1bbdf61 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 e50afa4d6fdaa62594934d320dc3986f179af047..65fe080b7cc0dc311fcc876efbf8b5e7434f2cfa 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 }