未验证 提交 b092b4e6 编写于 作者: O openharmony_ci 提交者: Gitee

!1892 去掉param初始化时的pid检查

Merge pull request !1892 from cheng_jinsong/initworkspace
...@@ -19,6 +19,11 @@ ...@@ -19,6 +19,11 @@
#include <string.h> #include <string.h>
#include <sys/wait.h> #include <sys/wait.h>
#include <termios.h> #include <termios.h>
#include <unistd.h>
#include <signal.h>
#undef _GNU_SOURCE
#define _GNU_SOURCE
#include <sched.h>
#include "begetctl.h" #include "begetctl.h"
#include "param_manager.h" #include "param_manager.h"
...@@ -32,6 +37,14 @@ ...@@ -32,6 +37,14 @@
#include "selinux_parameter.h" #include "selinux_parameter.h"
#endif // PARAM_SUPPORT_SELINUX #endif // PARAM_SUPPORT_SELINUX
typedef struct {
uid_t uid;
gid_t gid;
int cloneFlg;
char *parameter;
} ParamShellExecArgs;
#define STACK_SIZE (1024 * 1024 * 8)
#define MASK_LENGTH_MAX 4 #define MASK_LENGTH_MAX 4
pid_t g_shellPid = 0; pid_t g_shellPid = 0;
static struct termios g_terminalState; static struct termios g_terminalState;
...@@ -380,27 +393,60 @@ static int32_t BShellParamCmdPwd(BShellHandle shell, int32_t argc, char *argv[]) ...@@ -380,27 +393,60 @@ static int32_t BShellParamCmdPwd(BShellHandle shell, int32_t argc, char *argv[])
return 0; return 0;
} }
void GetUserInfo(uid_t *uid, gid_t *gid, char **parameter, int32_t argc, char *argv[]) static void GetUserInfo(ParamShellExecArgs *execArg, int32_t argc, char *argv[])
{ {
int32_t i = 0; int32_t i = 0;
*parameter = NULL; execArg->parameter = NULL;
while (i < argc) { while (i < argc) {
if (strcmp(argv[i], "-p") == 0 && ((i + 1) < argc)) { if (strcmp(argv[i], "-p") == 0 && ((i + 1) < argc)) {
*parameter = argv[i + 1]; execArg->parameter = argv[i + 1];
++i; ++i;
} else if (strcmp(argv[i], "-u") == 0 && ((i + 1) < argc)) { } else if (strcmp(argv[i], "-u") == 0 && ((i + 1) < argc)) {
*uid = DecodeUid(argv[i + 1]); execArg->uid = DecodeUid(argv[i + 1]);
*uid = (*uid == -1) ? 0 : *uid; execArg->uid = (execArg->uid == -1) ? 0 : execArg->uid;
++i; ++i;
} else if (strcmp(argv[i], "-g") == 0 && ((i + 1) < argc)) { } else if (strcmp(argv[i], "-g") == 0 && ((i + 1) < argc)) {
*gid = DecodeGid(argv[i + 1]); execArg->gid = DecodeGid(argv[i + 1]);
*gid = (*gid == -1) ? 0 : *gid; execArg->gid = (execArg->gid == -1) ? 0 : execArg->gid;
++i; ++i;
} else if (strcmp(argv[i], "-c") == 0) {
execArg->cloneFlg = 1;
} }
++i; ++i;
} }
} }
static int ExecFunc(void *arg)
{
ParamShellExecArgs *execArg = (ParamShellExecArgs *)arg;
int ret = 0;
setuid(execArg->uid);
setgid(execArg->gid);
BSH_LOGI("Exec shell %s \n", SHELL_NAME);
if (execArg->parameter != NULL) { // 2 min argc
char *args[] = {SHELL_NAME, execArg->parameter, NULL};
ret = execv(CMD_PATH, args);
} else {
char *args[] = {SHELL_NAME, NULL};
ret = execv(CMD_PATH, args);
}
if (ret != 0) {
printf("error on exec %d \n", errno);
exit(0);
}
return ret;
}
static pid_t ForkChild(int (*childFunc)(void *arg), void *args)
{
pid_t pid = fork();
if (pid == 0) {
childFunc(args);
exit(0);
}
return pid;
}
static int32_t BShellParamCmdShell(BShellHandle shell, int32_t argc, char *argv[]) static int32_t BShellParamCmdShell(BShellHandle shell, int32_t argc, char *argv[])
{ {
#ifndef STARTUP_INIT_TEST #ifndef STARTUP_INIT_TEST
...@@ -410,36 +456,27 @@ static int32_t BShellParamCmdShell(BShellHandle shell, int32_t argc, char *argv[ ...@@ -410,36 +456,27 @@ static int32_t BShellParamCmdShell(BShellHandle shell, int32_t argc, char *argv[
return BSH_SYSTEM_ERR; return BSH_SYSTEM_ERR;
} }
g_isSetTerminal = 1; g_isSetTerminal = 1;
uid_t uid = 0; ParamShellExecArgs args = {0, 0, 0, NULL};
gid_t gid = 0; GetUserInfo(&args, argc, argv);
char *parameter = NULL; BSH_LOGV("BShellParamCmdShell %s %d %d argc %d", args.parameter, args.uid, args.gid, argc);
GetUserInfo(&uid, &gid, &parameter, argc, argv); if (args.parameter != NULL) {
BSH_LOGV("BShellParamCmdShell %s %d %d argc %d", parameter, uid, gid, argc); ret = SystemCheckParamExist(args.parameter);
if (parameter != NULL) {
ret = SystemCheckParamExist(parameter);
if (ret != 0) { if (ret != 0) {
BShellEnvOutput(shell, "Error: parameter \'%s\' not found\r\n", parameter); BShellEnvOutput(shell, "Error: parameter \'%s\' not found\r\n", args.parameter);
return -1; return -1;
} }
} }
SetInitLogLevel(INIT_INFO); SetInitLogLevel(INIT_INFO);
pid_t pid = fork(); pid_t pid = 0;
if (pid == 0) { if (args.cloneFlg) {
setuid(uid); char *childStack = (char *)malloc(STACK_SIZE);
setgid(gid); BSH_CHECK(childStack != NULL, return -1, "malloc failed");
if (parameter != NULL) { // 2 min argc pid = clone(ExecFunc, childStack + STACK_SIZE, CLONE_NEWPID | CLONE_NEWNS | SIGCHLD, (void *)&args);
char *args[] = {SHELL_NAME, parameter, NULL}; free(childStack);
ret = execv(CMD_PATH, args); } else {
} else { pid = ForkChild(ExecFunc, (void *)&args);
char *args[] = {SHELL_NAME, NULL}; }
ret = execv(CMD_PATH, args); if (pid > 0) {
}
if (ret < 0) {
printf("error on exec %d \n", errno);
exit(0);
}
exit(0);
} else if (pid > 0) {
g_shellPid = pid; g_shellPid = pid;
int status = 0; int status = 0;
wait(&status); wait(&status);
......
...@@ -56,7 +56,7 @@ static int InitSelinuxOpsForInit(SelinuxSpace *selinuxSpace) ...@@ -56,7 +56,7 @@ static int InitSelinuxOpsForInit(SelinuxSpace *selinuxSpace)
PARAM_CHECK(selinuxSpace->getParamLabel != NULL, return -1, "Failed to dlsym getParamLabel %s", dlerror()); PARAM_CHECK(selinuxSpace->getParamLabel != NULL, return -1, "Failed to dlsym getParamLabel %s", dlerror());
} }
if (selinuxSpace->initParamSelinux == NULL) { if (selinuxSpace->initParamSelinux == NULL) {
selinuxSpace->initParamSelinux = (int (*)())dlsym(handle, "InitParamSelinux"); selinuxSpace->initParamSelinux = (int (*)(int))dlsym(handle, "InitParamSelinux");
PARAM_CHECK(selinuxSpace->initParamSelinux != NULL, return -1, "Failed to dlsym initParamSelinux "); PARAM_CHECK(selinuxSpace->initParamSelinux != NULL, return -1, "Failed to dlsym initParamSelinux ");
} }
if (selinuxSpace->getParamLabelIndex == NULL) { if (selinuxSpace->getParamLabelIndex == NULL) {
...@@ -74,7 +74,7 @@ static int InitSelinuxOpsForInit(SelinuxSpace *selinuxSpace) ...@@ -74,7 +74,7 @@ static int InitSelinuxOpsForInit(SelinuxSpace *selinuxSpace)
} }
// init and open avc log // init and open avc log
int ret = selinuxSpace->initParamSelinux(); int ret = selinuxSpace->initParamSelinux(1);
if (selinuxSpace->setSelinuxLogCallback != NULL) { if (selinuxSpace->setSelinuxLogCallback != NULL) {
selinuxSpace->setSelinuxLogCallback(); selinuxSpace->setSelinuxLogCallback();
} }
...@@ -103,7 +103,7 @@ static int InitLocalSecurityLabel(ParamSecurityLabel *security, int isInit) ...@@ -103,7 +103,7 @@ static int InitLocalSecurityLabel(ParamSecurityLabel *security, int isInit)
selinuxSpace->destroyParamList = DestroyParamList; selinuxSpace->destroyParamList = DestroyParamList;
selinuxSpace->getParamLabelIndex = GetParamLabelIndex; selinuxSpace->getParamLabelIndex = GetParamLabelIndex;
// init // init
selinuxSpace->initParamSelinux(); selinuxSpace->initParamSelinux(isInit);
} }
#endif #endif
PARAM_LOGV("Load selinux lib success."); PARAM_LOGV("Load selinux lib success.");
......
...@@ -107,6 +107,14 @@ static int CheckNeedInit(int onlyRead, const PARAM_WORKSPACE_OPS *ops) ...@@ -107,6 +107,14 @@ static int CheckNeedInit(int onlyRead, const PARAM_WORKSPACE_OPS *ops)
#endif #endif
} }
if (PARAM_TEST_FLAG(g_paramWorkSpace.flags, WORKSPACE_FLAGS_INIT)) { if (PARAM_TEST_FLAG(g_paramWorkSpace.flags, WORKSPACE_FLAGS_INIT)) {
PARAM_LOGV("Param workspace has been init");
if (PARAM_TEST_FLAG(g_paramWorkSpace.flags, WORKSPACE_FLAGS_FOR_INIT)) {
return 0; // init has been init workspace, do not init
}
if (onlyRead == 0) { // init not init workspace, do init it
CloseParamWorkSpace();
return 1;
}
return 0; return 0;
} }
if (onlyRead == 0) { if (onlyRead == 0) {
...@@ -132,8 +140,10 @@ INIT_INNER_API int InitParamWorkSpace(int onlyRead, const PARAM_WORKSPACE_OPS *o ...@@ -132,8 +140,10 @@ INIT_INNER_API int InitParamWorkSpace(int onlyRead, const PARAM_WORKSPACE_OPS *o
} }
paramMutexEnvInit(); paramMutexEnvInit();
g_paramWorkSpace.maxLabelIndex = PARAM_DEF_SELINUX_LABEL; g_paramWorkSpace.maxLabelIndex = PARAM_DEF_SELINUX_LABEL;
g_paramWorkSpace.workSpace = (WorkSpace **)calloc(g_paramWorkSpace.maxLabelIndex, sizeof(WorkSpace *)); if (!PARAM_TEST_FLAG(g_paramWorkSpace.flags, WORKSPACE_FLAGS_INIT)) {
PARAM_CHECK(g_paramWorkSpace.workSpace != NULL, return -1, "Failed to alloc memory for workSpace"); g_paramWorkSpace.workSpace = (WorkSpace **)calloc(g_paramWorkSpace.maxLabelIndex, sizeof(WorkSpace *));
PARAM_CHECK(g_paramWorkSpace.workSpace != NULL, return -1, "Failed to alloc memory for workSpace");
}
PARAM_SET_FLAG(g_paramWorkSpace.flags, WORKSPACE_FLAGS_INIT); PARAM_SET_FLAG(g_paramWorkSpace.flags, WORKSPACE_FLAGS_INIT);
int ret = RegisterSecurityOps(onlyRead); int ret = RegisterSecurityOps(onlyRead);
...@@ -166,6 +176,7 @@ INIT_INNER_API int InitParamWorkSpace(int onlyRead, const PARAM_WORKSPACE_OPS *o ...@@ -166,6 +176,7 @@ INIT_INNER_API int InitParamWorkSpace(int onlyRead, const PARAM_WORKSPACE_OPS *o
#endif #endif
ret = AddSecurityLabel(&auditData); ret = AddSecurityLabel(&auditData);
PARAM_CHECK(ret == 0, return ret, "Failed to add default dac label"); PARAM_CHECK(ret == 0, return ret, "Failed to add default dac label");
PARAM_SET_FLAG(g_paramWorkSpace.flags, WORKSPACE_FLAGS_FOR_INIT);
} else { } else {
ret = OpenWorkSpace(WORKSPACE_INDEX_DAC, onlyRead); ret = OpenWorkSpace(WORKSPACE_INDEX_DAC, onlyRead);
PARAM_CHECK(ret == 0, return -1, "Failed to open dac workspace"); PARAM_CHECK(ret == 0, return -1, "Failed to open dac workspace");
...@@ -237,9 +248,6 @@ int SystemReadParam(const char *name, char *value, uint32_t *len) ...@@ -237,9 +248,6 @@ int SystemReadParam(const char *name, char *value, uint32_t *len)
void InitParameterClient(void) void InitParameterClient(void)
{ {
if (getpid() == 1) {
return;
}
PARAM_WORKSPACE_OPS ops = {0}; PARAM_WORKSPACE_OPS ops = {0};
ops.updaterMode = 0; ops.updaterMode = 0;
InitParamWorkSpace(1, &ops); InitParamWorkSpace(1, &ops);
...@@ -257,28 +265,27 @@ INIT_LOCAL_API int AddWorkSpace(const char *name, uint32_t labelIndex, int onlyR ...@@ -257,28 +265,27 @@ INIT_LOCAL_API int AddWorkSpace(const char *name, uint32_t labelIndex, int onlyR
#endif #endif
int ret = CheckAndExtendSpace(paramSpace, name, labelIndex); int ret = CheckAndExtendSpace(paramSpace, name, labelIndex);
PARAM_CHECK(ret == 0, return -1, "Not enough memory for %s", realName); PARAM_CHECK(ret == 0, return -1, "Not enough memory for %s", realName);
if (paramSpace->workSpace[labelIndex] != NULL) { if (paramSpace->workSpace[labelIndex] == NULL) {
return 0; const size_t size = strlen(realName) + 1;
WorkSpace *workSpace = (WorkSpace *)malloc(sizeof(WorkSpace) + size);
PARAM_CHECK(workSpace != NULL, return -1, "Failed to create workspace for %s", realName);
workSpace->flags = 0;
workSpace->spaceSize = spaceSize;
workSpace->area = NULL;
workSpace->spaceIndex = labelIndex;
ATOMIC_INIT(&workSpace->rwSpaceLock, 0);
PARAMSPACE_AREA_INIT_LOCK(workSpace);
ret = ParamStrCpy(workSpace->fileName, size, realName);
PARAM_CHECK(ret == 0, free(workSpace);
return -1, "Failed to copy file name %s", realName);
paramSpace->workSpace[labelIndex] = workSpace;
} }
const size_t size = strlen(realName) + 1;
WorkSpace *workSpace = (WorkSpace *)malloc(sizeof(WorkSpace) + size);
PARAM_CHECK(workSpace != NULL, return -1, "Failed to create workspace for %s", realName);
workSpace->flags = 0;
workSpace->spaceSize = spaceSize;
workSpace->area = NULL;
workSpace->spaceIndex = labelIndex;
ATOMIC_INIT(&workSpace->rwSpaceLock, 0);
PARAMSPACE_AREA_INIT_LOCK(workSpace);
ret = ParamStrCpy(workSpace->fileName, size, realName);
PARAM_CHECK(ret == 0, free(workSpace);
return -1, "Failed to copy file name %s", realName);
paramSpace->workSpace[labelIndex] = workSpace;
if (!onlyRead) { if (!onlyRead) {
PARAM_LOGI("AddWorkSpace %s index %d spaceSize: %u onlyRead %s", PARAM_LOGI("AddWorkSpace %s index %d spaceSize: %u onlyRead %s",
workSpace->fileName, workSpace->spaceIndex, workSpace->spaceSize, onlyRead ? "true" : "false"); paramSpace->workSpace[labelIndex]->fileName, paramSpace->workSpace[labelIndex]->spaceIndex,
paramSpace->workSpace[labelIndex]->spaceSize, onlyRead ? "true" : "false");
ret = OpenWorkSpace(labelIndex, onlyRead); ret = OpenWorkSpace(labelIndex, onlyRead);
PARAM_CHECK(ret == 0, free(workSpace); PARAM_CHECK(ret == 0, free(paramSpace->workSpace[labelIndex]);
paramSpace->workSpace[labelIndex] = NULL; paramSpace->workSpace[labelIndex] = NULL;
return -1, "Failed to open workspace for name %s", realName); return -1, "Failed to open workspace for name %s", realName);
} }
...@@ -322,6 +329,7 @@ STATIC_INLINE ParamTrieNode *GetTrieNodeByHandle(ParamHandle handle) ...@@ -322,6 +329,7 @@ STATIC_INLINE ParamTrieNode *GetTrieNodeByHandle(ParamHandle handle)
int SystemGetParameterCommitId(ParamHandle handle, uint32_t *commitId) int SystemGetParameterCommitId(ParamHandle handle, uint32_t *commitId)
{ {
PARAM_ONLY_CHECK(handle != (ParamHandle)-1, return PARAM_CODE_NOT_FOUND);
PARAM_CHECK(handle != 0 && commitId != NULL, return -1, "The handle is null"); PARAM_CHECK(handle != 0 && commitId != NULL, return -1, "The handle is null");
ParamNode *entry = (ParamNode *)GetTrieNodeByHandle(handle); ParamNode *entry = (ParamNode *)GetTrieNodeByHandle(handle);
if (entry == NULL) { if (entry == NULL) {
...@@ -343,6 +351,7 @@ long long GetSystemCommitId(void) ...@@ -343,6 +351,7 @@ long long GetSystemCommitId(void)
int SystemGetParameterValue(ParamHandle handle, char *value, unsigned int *len) int SystemGetParameterValue(ParamHandle handle, char *value, unsigned int *len)
{ {
PARAM_ONLY_CHECK(handle != (ParamHandle)-1, return PARAM_CODE_NOT_FOUND);
PARAM_CHECK(len != NULL && handle != 0, return -1, "The value is null"); PARAM_CHECK(len != NULL && handle != 0, return -1, "The value is null");
return ReadParamValue((ParamNode *)GetTrieNodeByHandle(handle), value, len); return ReadParamValue((ParamNode *)GetTrieNodeByHandle(handle), value, len);
} }
...@@ -379,6 +388,7 @@ INIT_LOCAL_API int OpenWorkSpace(uint32_t index, int readOnly) ...@@ -379,6 +388,7 @@ INIT_LOCAL_API int OpenWorkSpace(uint32_t index, int readOnly)
workSpace = paramSpace->workSpace[index]; workSpace = paramSpace->workSpace[index];
} }
if (workSpace == NULL) { if (workSpace == NULL) {
PARAM_LOGE("Invalid index %d", index);
return 0; return 0;
} }
int ret = 0; int ret = 0;
...@@ -448,11 +458,12 @@ static int GetParamLabelInfo(const char *name, ParamLabelIndex *labelIndex, Para ...@@ -448,11 +458,12 @@ static int GetParamLabelInfo(const char *name, ParamLabelIndex *labelIndex, Para
if ((securityNode == NULL) || (securityNode->selinuxIndex == 0) || if ((securityNode == NULL) || (securityNode->selinuxIndex == 0) ||
(securityNode->selinuxIndex == INVALID_SELINUX_INDEX)) { (securityNode->selinuxIndex == INVALID_SELINUX_INDEX)) {
labelIndex->workspace = GetWorkSpaceByName(name); labelIndex->workspace = GetWorkSpaceByName(name);
PARAM_CHECK(labelIndex->workspace != NULL, return DAC_RESULT_FORBIDED, "Invalid workSpace for %s", name);
} else if (securityNode->selinuxIndex < g_paramWorkSpace.maxLabelIndex) { } else if (securityNode->selinuxIndex < g_paramWorkSpace.maxLabelIndex) {
labelIndex->workspace = g_paramWorkSpace.workSpace[securityNode->selinuxIndex]; labelIndex->workspace = g_paramWorkSpace.workSpace[securityNode->selinuxIndex];
PARAM_CHECK(labelIndex->workspace != NULL, return DAC_RESULT_FORBIDED,
"Invalid workSpace for %s %d", name, securityNode->selinuxIndex);
} }
PARAM_CHECK(labelIndex->workspace != NULL, return DAC_RESULT_FORBIDED,
"Invalid workSpace for %s %d", name, securityNode->selinuxIndex);
labelIndex->selinuxLabelIndex = labelIndex->workspace->spaceIndex; labelIndex->selinuxLabelIndex = labelIndex->workspace->spaceIndex;
return 0; return 0;
} }
...@@ -629,8 +640,9 @@ STATIC_INLINE int CheckParamPermission_(const ParamLabelIndex *labelIndex, ...@@ -629,8 +640,9 @@ STATIC_INLINE int CheckParamPermission_(const ParamLabelIndex *labelIndex,
STATIC_INLINE int CheckParamPermission_(const ParamLabelIndex *labelIndex, STATIC_INLINE int CheckParamPermission_(const ParamLabelIndex *labelIndex,
const ParamSecurityLabel *srcLabel, const char *name, uint32_t mode) const ParamSecurityLabel *srcLabel, const char *name, uint32_t mode)
{ {
// for root, all permission, but for appspawn must to check // only for root and write, all permission, but for appspawn must to check
if (srcLabel->cred.uid == 0 && srcLabel->cred.pid == 1) { // for clod start in new namespace, pid==1 and uid==root
if (srcLabel->cred.uid == 0 && srcLabel->cred.pid == 1 && mode == DAC_WRITE) {
return DAC_RESULT_PERMISSION; return DAC_RESULT_PERMISSION;
} }
int ret = DacCheckParamPermission(labelIndex, srcLabel, name, mode); int ret = DacCheckParamPermission(labelIndex, srcLabel, name, mode);
...@@ -679,6 +691,7 @@ CachedHandle CachedParameterCreate(const char *name, const char *defValue) ...@@ -679,6 +691,7 @@ CachedHandle CachedParameterCreate(const char *name, const char *defValue)
WorkSpace *workspace = NULL; WorkSpace *workspace = NULL;
int ret = ReadParamWithCheck(&workspace, name, DAC_READ, &node); int ret = ReadParamWithCheck(&workspace, name, DAC_READ, &node);
PARAM_CHECK(ret == 0, return NULL, "Forbid to access parameter %s", name); PARAM_CHECK(ret == 0, return NULL, "Forbid to access parameter %s", name);
PARAM_CHECK(workspace != NULL && workspace->area != NULL, return NULL, "Forbid to access parameter %s", name);
CachedParameter *param = (CachedParameter *)malloc( CachedParameter *param = (CachedParameter *)malloc(
sizeof(CachedParameter) + PARAM_ALIGN(nameLen) + 1 + PARAM_VALUE_LEN_MAX); sizeof(CachedParameter) + PARAM_ALIGN(nameLen) + 1 + PARAM_VALUE_LEN_MAX);
......
...@@ -298,7 +298,7 @@ INIT_LOCAL_API ParamTrieNode *FindTrieNode(WorkSpace *workSpace, ...@@ -298,7 +298,7 @@ INIT_LOCAL_API ParamTrieNode *FindTrieNode(WorkSpace *workSpace,
const char *key, uint32_t keyLen, uint32_t *matchLabel) const char *key, uint32_t keyLen, uint32_t *matchLabel)
{ {
PARAM_ONLY_CHECK(key != NULL && keyLen > 0, return NULL); PARAM_ONLY_CHECK(key != NULL && keyLen > 0, return NULL);
PARAM_CHECK(workSpace != NULL, return NULL, "Invalid workspace for %s", key);
uint32_t tmpMatchLen = 0; uint32_t tmpMatchLen = 0;
ParamTrieNode *node = NULL; ParamTrieNode *node = NULL;
PARAMSPACE_AREA_RD_LOCK(workSpace); PARAMSPACE_AREA_RD_LOCK(workSpace);
...@@ -342,6 +342,7 @@ INIT_LOCAL_API ParamNode *GetParamNode(uint32_t index, const char *name) ...@@ -342,6 +342,7 @@ INIT_LOCAL_API ParamNode *GetParamNode(uint32_t index, const char *name)
INIT_LOCAL_API int AddParamEntry(uint32_t index, uint8_t type, const char *name, const char *value) INIT_LOCAL_API int AddParamEntry(uint32_t index, uint8_t type, const char *name, const char *value)
{ {
WorkSpace *workSpace = GetWorkSpace(WORKSPACE_INDEX_BASE); WorkSpace *workSpace = GetWorkSpace(WORKSPACE_INDEX_BASE);
PARAM_CHECK(workSpace != NULL, return PARAM_CODE_ERROR, "Invalid workspace");
ParamTrieNode *node = FindTrieNode(workSpace, name, strlen(name), NULL); ParamTrieNode *node = FindTrieNode(workSpace, name, strlen(name), NULL);
if (node != NULL && node->dataIndex != 0) { if (node != NULL && node->dataIndex != 0) {
return 0; return 0;
......
...@@ -114,7 +114,7 @@ typedef struct SelinuxSpace_ { ...@@ -114,7 +114,7 @@ typedef struct SelinuxSpace_ {
void (*setSelinuxLogCallback)(void); void (*setSelinuxLogCallback)(void);
int (*setParamCheck)(const char *paraName, const char *destContext, const SrcInfo *info); int (*setParamCheck)(const char *paraName, const char *destContext, const SrcInfo *info);
const char *(*getParamLabel)(const char *paraName); const char *(*getParamLabel)(const char *paraName);
int (*initParamSelinux)(void); int (*initParamSelinux)(int isInit);
int (*readParamCheck)(const char *paraName); int (*readParamCheck)(const char *paraName);
ParamContextsList *(*getParamList)(void); ParamContextsList *(*getParamList)(void);
void (*destroyParamList)(ParamContextsList **list); void (*destroyParamList)(ParamContextsList **list);
......
...@@ -85,6 +85,7 @@ typedef enum { ...@@ -85,6 +85,7 @@ typedef enum {
#define WORKSPACE_FLAGS_UPDATE 0x04 #define WORKSPACE_FLAGS_UPDATE 0x04
#define WORKSPACE_FLAGS_LABEL_LOADED 0x08 #define WORKSPACE_FLAGS_LABEL_LOADED 0x08
#define WORKSPACE_FLAGS_NEED_ACCESS 0x10 #define WORKSPACE_FLAGS_NEED_ACCESS 0x10
#define WORKSPACE_FLAGS_FOR_INIT 0x20
#define PARAM_SET_FLAG(node, flag) ((node) |= (flag)) #define PARAM_SET_FLAG(node, flag) ((node) |= (flag))
#define PARAM_CLEAR_FLAG(node, flag) ((node) &= ~(flag)) #define PARAM_CLEAR_FLAG(node, flag) ((node) &= ~(flag))
......
...@@ -36,9 +36,6 @@ static pthread_mutex_t g_clientMutex = PTHREAD_MUTEX_INITIALIZER; ...@@ -36,9 +36,6 @@ static pthread_mutex_t g_clientMutex = PTHREAD_MUTEX_INITIALIZER;
__attribute__((constructor)) static void ParameterInit(void) __attribute__((constructor)) static void ParameterInit(void)
{ {
if (getpid() == 1) {
return;
}
ATOMIC_INIT(&g_requestId, 1); ATOMIC_INIT(&g_requestId, 1);
EnableInitLog(INIT_WARN); EnableInitLog(INIT_WARN);
PARAM_WORKSPACE_OPS ops = {0}; PARAM_WORKSPACE_OPS ops = {0};
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册