提交 3d01c25c 编写于 作者: Z zhangqilong 提交者: Qilong Zhang

fscrypt:fix init unittest compile failed

Signed-off-by: Nzhangqilong <zhangqilong3@huawei.com>
Change-Id: I1d4def8c08dd4f54ae48191340c4c36ba319b8a8
上级 9b27d151
...@@ -42,11 +42,7 @@ struct MountFlags { ...@@ -42,11 +42,7 @@ struct MountFlags {
unsigned long flags; unsigned long flags;
}; };
#define POLICY_BUFFER (100) static char *g_fscryptPolicy = NULL;
static const char *g_fscryptPre = "fscrypt=";
static const char *g_mountPoint = "/data";
static char g_fscryptPolicy[POLICY_BUFFER] = { 0 };
static unsigned int ConvertFlags(char *flagBuffer) static unsigned int ConvertFlags(char *flagBuffer)
{ {
...@@ -392,10 +388,12 @@ static unsigned long ParseDefaultMountFlag(const char *str) ...@@ -392,10 +388,12 @@ static unsigned long ParseDefaultMountFlag(const char *str)
static bool IsFscryptOption(const char *option) static bool IsFscryptOption(const char *option)
{ {
BEGET_LOGI("IsFscryptOption start");
if (!option) { if (!option) {
return false; return false;
} }
if (strncmp(option, g_fscryptPre, strlen(g_fscryptPre)) == 0) { char *fscryptPre = "fscrypt=";
if (strncmp(option, fscryptPre, strlen(fscryptPre)) == 0) {
return true; return true;
} }
return false; return false;
...@@ -403,23 +401,41 @@ static bool IsFscryptOption(const char *option) ...@@ -403,23 +401,41 @@ static bool IsFscryptOption(const char *option)
static void StoreFscryptPolicy(const char *option) static void StoreFscryptPolicy(const char *option)
{ {
if (!option) { if (option == NULL) {
return; return;
} }
if (strcpy_s(g_fscryptPolicy, POLICY_BUFFER - 1, option) != EOK) { if (g_fscryptPolicy != NULL) {
g_fscryptPolicy[0] = '\0'; BEGET_LOGW("StoreFscryptPolicy:inited policy is not empty");
BEGET_LOGE("StoreFscryptPolicy: copy policy failed"); free(g_fscryptPolicy);
}
g_fscryptPolicy = strdup(option);
if (g_fscryptPolicy == NULL) {
BEGET_LOGE("StoreFscryptPolicy:no memory");
return; return;
} }
BEGET_LOGI("StoreFscryptPolicy:load fscrypt policy, %s", option); BEGET_LOGI("StoreFscryptPolicy:store fscrypt policy, %s", option);
} }
const char *LoadFscryptPolicy(void) int LoadFscryptPolicy(char *buf, size_t size)
{ {
if (strnlen(g_fscryptPolicy, POLICY_BUFFER - 1) == 0) { BEGET_LOGI("LoadFscryptPolicy start");
return NULL; if (buf == NULL || g_fscryptPolicy == NULL) {
BEGET_LOGE("LoadFscryptPolicy:buf or fscrypt policy is empty");
return -ENOMEM;
} }
return g_fscryptPolicy; if (size <= 0) {
BEGET_LOGE("LoadFscryptPloicy:size is invalid");
return -EINVAL;
}
if (strcpy_s(buf, size, g_fscryptPolicy) != 0) {
BEGET_LOGE("loadFscryptPolicy:strcmp failed, error = %d", errno);
return -EFAULT;
}
free(g_fscryptPolicy);
g_fscryptPolicy = NULL;
BEGET_LOGI("LoadFscryptPolicy success");
return 0;
} }
unsigned long GetMountFlags(char *mountFlag, char *fsSpecificData, size_t fsSpecificDataSize, unsigned long GetMountFlags(char *mountFlag, char *fsSpecificData, size_t fsSpecificDataSize,
...@@ -448,8 +464,8 @@ unsigned long GetMountFlags(char *mountFlag, char *fsSpecificData, size_t fsSpec ...@@ -448,8 +464,8 @@ unsigned long GetMountFlags(char *mountFlag, char *fsSpecificData, size_t fsSpec
flags |= ParseDefaultMountFlag(p); flags |= ParseDefaultMountFlag(p);
} else { } else {
if (IsFscryptOption(p) && if (IsFscryptOption(p) &&
!strncmp(mountPoint, g_mountPoint, strlen(g_mountPoint))) { !strncmp(mountPoint, "/data", strlen("/data"))) {
StoreFscryptPolicy(p + strlen(g_fscryptPre)); StoreFscryptPolicy(p + strlen("fscrypt="));
continue; continue;
} }
if (strncat_s(fsSpecificData, fsSpecificDataSize - 1, p, strlen(p)) != EOK) { if (strncat_s(fsSpecificData, fsSpecificDataSize - 1, p, strlen(p)) != EOK) {
......
...@@ -76,7 +76,7 @@ unsigned long GetMountFlags(char *mountFlag, char *fsSpecificFlags, size_t fsSpe ...@@ -76,7 +76,7 @@ unsigned long GetMountFlags(char *mountFlag, char *fsSpecificFlags, size_t fsSpe
int GetBlockDevicePath(const char *partName, char *path, int size); int GetBlockDevicePath(const char *partName, char *path, int size);
// Get fscrypt policy if exist // Get fscrypt policy if exist
const char *LoadFscryptPolicy(void); int LoadFscryptPolicy(char *buf, size_t size);
#ifdef __cplusplus #ifdef __cplusplus
#if __cplusplus #if __cplusplus
} }
......
...@@ -46,6 +46,7 @@ ...@@ -46,6 +46,7 @@
#endif #endif
#include "fscrypt_utils.h" #include "fscrypt_utils.h"
#define FSCRYPT_POLICY_BUF_SIZE (60)
int GetParamValue(const char *symValue, unsigned int symLen, char *paramValue, unsigned int paramLen) int GetParamValue(const char *symValue, unsigned int symLen, char *paramValue, unsigned int paramLen)
{ {
...@@ -414,8 +415,8 @@ static void DoTimerStop(const struct CmdArgs *ctx) ...@@ -414,8 +415,8 @@ static void DoTimerStop(const struct CmdArgs *ctx)
static bool InitFscryptPolicy(void) static bool InitFscryptPolicy(void)
{ {
const char *policy = LoadFscryptPolicy(); char policy[FSCRYPT_POLICY_BUF_SIZE];
if (!policy) { if (LoadFscryptPolicy(policy, FSCRYPT_POLICY_BUF_SIZE) != 0) {
return false; return false;
} }
if (SetFscryptSysparam(policy) == 0) { if (SetFscryptSysparam(policy) == 0) {
...@@ -436,9 +437,8 @@ static void DoInitGlobalKey(const struct CmdArgs *ctx) ...@@ -436,9 +437,8 @@ static void DoInitGlobalKey(const struct CmdArgs *ctx)
INIT_LOGE("DoInitGlobalKey: not data partitation"); INIT_LOGE("DoInitGlobalKey: not data partitation");
return; return;
} }
if (!InitFscryptPolicy()) { if (!InitFscryptPolicy()) {
INIT_LOGE("DoInitGlobalKey: init policy failed"); INIT_LOGI("DoInitGlobalKey:init fscrypt failed,not enable fscrypt");
return; return;
} }
...@@ -460,10 +460,6 @@ static void DoInitMainUser(const struct CmdArgs *ctx) ...@@ -460,10 +460,6 @@ static void DoInitMainUser(const struct CmdArgs *ctx)
INIT_LOGE("DoInitMainUser: para invalid"); INIT_LOGE("DoInitMainUser: para invalid");
return; return;
} }
if (LoadFscryptPolicy() == NULL) {
INIT_LOGI("DoInitMainUser: file crypto is not enabled");
return;
}
char * const argv[] = { char * const argv[] = {
"/system/bin/sdc", "/system/bin/sdc",
...@@ -604,7 +600,6 @@ void OpenHidebug(const char *name) ...@@ -604,7 +600,6 @@ void OpenHidebug(const char *name)
int SetFileCryptPolicy(const char *dir) int SetFileCryptPolicy(const char *dir)
{ {
INIT_LOGI("SetFileCryptPolicy:start:%s", dir);
if (dir == NULL) { if (dir == NULL) {
INIT_LOGE("SetFileCryptPolicy:dir is null"); INIT_LOGE("SetFileCryptPolicy:dir is null");
return -EINVAL; return -EINVAL;
......
...@@ -108,6 +108,13 @@ ohos_unittest("init_unittest") { ...@@ -108,6 +108,13 @@ ohos_unittest("init_unittest") {
"//base/startup/init/ueventd/ueventd_socket.c", "//base/startup/init/ueventd/ueventd_socket.c",
] ]
sources += [
"${FSCRYPT_PATH}/libfscrypt/src/fscrypt_control.c",
"${FSCRYPT_PATH}/libfscrypt/src/fscrypt_utils.c",
"${FSCRYPT_PATH}/libfscrypt/src/key_control.c",
"${FSCRYPT_PATH}/libfscrypt/src/sysparam_static.c",
]
if (defined(build_selinux) && build_selinux) { if (defined(build_selinux) && build_selinux) {
sources += [ "//base/startup/init/services/param/adapter/param_selinux.c" ] sources += [ "//base/startup/init/services/param/adapter/param_selinux.c" ]
} }
...@@ -216,8 +223,6 @@ ohos_unittest("init_unittest") { ...@@ -216,8 +223,6 @@ ohos_unittest("init_unittest") {
"//utils/native/base:utils", "//utils/native/base:utils",
] ]
deps += [ "${FSCRYPT_PATH}/libfscrypt:libfscryptutils_static" ]
defines = [ defines = [
"READ_CHECK", "READ_CHECK",
"INIT_AGENT", "INIT_AGENT",
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册