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

!1107 支持proc/self目录

Merge pull request !1107 from zhushengle/proc_self
...@@ -34,6 +34,7 @@ LITEOS_MENUCONFIG_H = rebase_path("$root_out_dir/config.h") ...@@ -34,6 +34,7 @@ LITEOS_MENUCONFIG_H = rebase_path("$root_out_dir/config.h")
declare_args() { declare_args() {
tee_enable = false tee_enable = false
liteos_name = "OHOS_Image" liteos_name = "OHOS_Image"
liteos_container_enable = false
liteos_skip_make = false liteos_skip_make = false
liteos_is_mini = false liteos_is_mini = false
} }
...@@ -239,6 +240,21 @@ config("misc_config") { ...@@ -239,6 +240,21 @@ config("misc_config") {
asmflags = cflags asmflags = cflags
} }
config("container_config") {
if (liteos_container_enable) {
cflags = [
"-DLOSCFG_KERNEL_CONTAINER",
"-DLOSCFG_PID_CONTAINER",
"-DLOSCFG_UTS_CONTAINER",
"-DLOSCFG_MNT_CONTAINER",
"-DLOSCFG_CHROOT",
"-DLOSCFG_IPC_CONTAINER",
"-DLOSCFG_TIME_CONTAINER",
"-DLOSCFG_PROC_PROCESS_DIR",
]
}
}
config("los_config") { config("los_config") {
configs = [ configs = [
":arch_config", ":arch_config",
...@@ -249,6 +265,7 @@ config("los_config") { ...@@ -249,6 +265,7 @@ config("los_config") {
":ssp_config", ":ssp_config",
":warn_config", ":warn_config",
":misc_config", ":misc_config",
":container_config",
] ]
} }
......
...@@ -60,6 +60,14 @@ struct ProcessData { ...@@ -60,6 +60,14 @@ struct ProcessData {
unsigned int type; unsigned int type;
}; };
static LosProcessCB *ProcGetProcessCB(struct ProcessData *data)
{
if (data->process != 0) {
return (LosProcessCB *)data->process;
}
return OsCurrProcessGet();
}
#define PROC_PID_PRIVILEGE 7 #define PROC_PID_PRIVILEGE 7
#define PROC_PID_DIR_LEN 100 #define PROC_PID_DIR_LEN 100
#ifdef LOSCFG_KERNEL_CONTAINER #ifdef LOSCFG_KERNEL_CONTAINER
...@@ -95,7 +103,7 @@ static ssize_t ProcessContainerReadLink(struct ProcDirEntry *entry, char *buffer ...@@ -95,7 +103,7 @@ static ssize_t ProcessContainerReadLink(struct ProcDirEntry *entry, char *buffer
if (data == NULL) { if (data == NULL) {
return -EINVAL; return -EINVAL;
} }
LosProcessCB *processCB = (LosProcessCB *)data->process; LosProcessCB *processCB = ProcGetProcessCB(data);
SCHEDULER_LOCK(intSave); SCHEDULER_LOCK(intSave);
UINT32 containerID = OsGetContainerID(processCB->container, (ContainerType)data->type); UINT32 containerID = OsGetContainerID(processCB->container, (ContainerType)data->type);
SCHEDULER_UNLOCK(intSave); SCHEDULER_UNLOCK(intSave);
...@@ -139,7 +147,7 @@ static int ProcessMemInfoRead(struct SeqBuf *seqBuf, LosProcessCB *pcb) ...@@ -139,7 +147,7 @@ static int ProcessMemInfoRead(struct SeqBuf *seqBuf, LosProcessCB *pcb)
(void)LosBufPrintf(seqBuf, "VMSpaceMapSize: %u byte\n", vmSpace->mapSize); (void)LosBufPrintf(seqBuf, "VMSpaceMapSize: %u byte\n", vmSpace->mapSize);
(void)LosBufPrintf(seqBuf, "VM TLB Asid: %u\n", vmSpace->archMmu.asid); (void)LosBufPrintf(seqBuf, "VM TLB Asid: %u\n", vmSpace->archMmu.asid);
(void)LosBufPrintf(seqBuf, "VMHeapSize: %u byte\n", heap->range.size); (void)LosBufPrintf(seqBuf, "VMHeapSize: %u byte\n", heap->range.size);
(void)LosBufPrintf(seqBuf, "VMHeapRegionNmae: %s\n", OsGetRegionNameOrFilePath(heap)); (void)LosBufPrintf(seqBuf, "VMHeapRegionName: %s\n", OsGetRegionNameOrFilePath(heap));
(void)LosBufPrintf(seqBuf, "VMHeapRegionType: 0x%x\n", heap->regionType); (void)LosBufPrintf(seqBuf, "VMHeapRegionType: 0x%x\n", heap->regionType);
(void)LOS_MemFree(m_aucSysMem1, vmSpace); (void)LOS_MemFree(m_aucSysMem1, vmSpace);
return 0; return 0;
...@@ -192,7 +200,7 @@ static int ProcTimeContainerRead(struct SeqBuf *m, void *v) ...@@ -192,7 +200,7 @@ static int ProcTimeContainerRead(struct SeqBuf *m, void *v)
struct ProcessData *data = (struct ProcessData *)v; struct ProcessData *data = (struct ProcessData *)v;
SCHEDULER_LOCK(intSave); SCHEDULER_LOCK(intSave);
LosProcessCB *processCB = (LosProcessCB *)data->process; LosProcessCB *processCB = ProcGetProcessCB(data);
ret = OsGetTimeContainerMonotonic(processCB, &offsets); ret = OsGetTimeContainerMonotonic(processCB, &offsets);
SCHEDULER_UNLOCK(intSave); SCHEDULER_UNLOCK(intSave);
if (ret != LOS_OK) { if (ret != LOS_OK) {
...@@ -265,7 +273,7 @@ static int ProcTimeContainerWrite(struct ProcFile *pf, const char *buf, size_t c ...@@ -265,7 +273,7 @@ static int ProcTimeContainerWrite(struct ProcFile *pf, const char *buf, size_t c
} }
buf += strlen(g_monotonic); buf += strlen(g_monotonic);
ret = ProcSetTimensOffset(buf, (LosProcessCB *)data->process); ret = ProcSetTimensOffset(buf, ProcGetProcessCB(data));
if (ret < 0) { if (ret < 0) {
(VOID)LOS_MemFree(m_aucSysMem1, kbuf); (VOID)LOS_MemFree(m_aucSysMem1, kbuf);
return ret; return ret;
...@@ -288,10 +296,10 @@ static int ProcProcessRead(struct SeqBuf *m, void *v) ...@@ -288,10 +296,10 @@ static int ProcProcessRead(struct SeqBuf *m, void *v)
struct ProcessData *data = (struct ProcessData *)v; struct ProcessData *data = (struct ProcessData *)v;
switch (data->type) { switch (data->type) {
case PROC_PID_MEM: case PROC_PID_MEM:
return ProcessMemInfoRead(m, (LosProcessCB *)data->process); return ProcessMemInfoRead(m, ProcGetProcessCB(data));
#ifdef LOSCFG_KERNEL_CPUP #ifdef LOSCFG_KERNEL_CPUP
case PROC_PID_CPUP: case PROC_PID_CPUP:
return ProcessCpupRead(m, (LosProcessCB *)data->process); return ProcessCpupRead(m, ProcGetProcessCB(data));
#endif #endif
default: default:
break; break;
...@@ -411,10 +419,18 @@ static struct ProcDirEntry *ProcCreatePorcess(UINT32 pid, struct ProcProcess *po ...@@ -411,10 +419,18 @@ static struct ProcDirEntry *ProcCreatePorcess(UINT32 pid, struct ProcProcess *po
if (data == NULL) { if (data == NULL) {
return NULL; return NULL;
} }
if (porcess->name != NULL) { if (pid != OS_INVALID_VALUE) {
ret = snprintf_s(pidName, PROC_PID_DIR_LEN, PROC_PID_DIR_LEN - 1, "%u/%s", pid, porcess->name); if (porcess->name != NULL) {
ret = snprintf_s(pidName, PROC_PID_DIR_LEN, PROC_PID_DIR_LEN - 1, "%u/%s", pid, porcess->name);
} else {
ret = snprintf_s(pidName, PROC_PID_DIR_LEN, PROC_PID_DIR_LEN - 1, "%u", pid);
}
} else { } else {
ret = snprintf_s(pidName, PROC_PID_DIR_LEN, PROC_PID_DIR_LEN - 1, "%u", pid); if (porcess->name != NULL) {
ret = snprintf_s(pidName, PROC_PID_DIR_LEN, PROC_PID_DIR_LEN - 1, "%s/%s", "self", porcess->name);
} else {
ret = snprintf_s(pidName, PROC_PID_DIR_LEN, PROC_PID_DIR_LEN - 1, "%s", "self");
}
} }
if (ret < 0) { if (ret < 0) {
free(data); free(data);
...@@ -448,9 +464,12 @@ int ProcCreateProcessDir(UINT32 pid, uintptr_t process) ...@@ -448,9 +464,12 @@ int ProcCreateProcessDir(UINT32 pid, uintptr_t process)
} }
} }
SCHEDULER_LOCK(intSave); if (process != 0) {
((LosProcessCB *)process)->procDir = pidDir; SCHEDULER_LOCK(intSave);
SCHEDULER_UNLOCK(intSave); ((LosProcessCB *)process)->procDir = pidDir;
SCHEDULER_UNLOCK(intSave);
}
return 0; return 0;
CREATE_ERROR: CREATE_ERROR:
...@@ -482,7 +501,12 @@ void ProcProcessInit(void) ...@@ -482,7 +501,12 @@ void ProcProcessInit(void)
pde->procFileOps = &PROCESS_PROC_FOPS; pde->procFileOps = &PROCESS_PROC_FOPS;
#ifdef LOSCFG_PROC_PROCESS_DIR #ifdef LOSCFG_PROC_PROCESS_DIR
int ret = ProcCreateProcessDir(OS_USER_ROOT_PROCESS_ID, (uintptr_t)OsGetUserInitProcess()); int ret = ProcCreateProcessDir(OS_INVALID_VALUE, 0);
if (ret < 0) {
PRINT_ERR("Create proc process self dir failed!\n");
}
ret = ProcCreateProcessDir(OS_USER_ROOT_PROCESS_ID, (uintptr_t)OsGetUserInitProcess());
if (ret < 0) { if (ret < 0) {
PRINT_ERR("Create proc process %d dir failed!\n", OS_USER_ROOT_PROCESS_ID); PRINT_ERR("Create proc process %d dir failed!\n", OS_USER_ROOT_PROCESS_ID);
} }
......
...@@ -37,6 +37,5 @@ group("testsuites") { ...@@ -37,6 +37,5 @@ group("testsuites") {
deps = [] deps = []
if (liteos_kernel_unittest) { if (liteos_kernel_unittest) {
deps += [ "unittest" ] deps += [ "unittest" ]
#deps += [ "//kernel/liteos_a/testsuites/fuzz:fuzztest" ]
} }
} }
...@@ -167,5 +167,10 @@ group("unittest") { ...@@ -167,5 +167,10 @@ group("unittest") {
deps += [ "container:liteos_a_container_unittest" ] deps += [ "container:liteos_a_container_unittest" ]
} }
} }
# fuzz test
if (LOSCFG_USER_FUZZ_TEST == true) {
deps += [ "fuzz:liteos_a_fuzztest" ]
}
} }
} }
...@@ -29,6 +29,10 @@ ...@@ -29,6 +29,10 @@
import("$root_out_dir/config.gni") import("$root_out_dir/config.gni")
TEST_UNITTEST_DIR = rebase_path(".") TEST_UNITTEST_DIR = rebase_path(".")
declare_args() {
liteos_container_test_enable = false
liteos_fuzz_test_enable = false
}
TEST_LEVEL_LOW = 1 TEST_LEVEL_LOW = 1
TEST_LEVEL_MIDDLE = 3 TEST_LEVEL_MIDDLE = 3
...@@ -127,7 +131,7 @@ LOSCFG_USER_TEST_SECURITY_REUGID = true ...@@ -127,7 +131,7 @@ LOSCFG_USER_TEST_SECURITY_REUGID = true
LOSCFG_USER_TEST_SECURITY_VID = true LOSCFG_USER_TEST_SECURITY_VID = true
LOSCFG_USER_TEST_PROCESS_FS = false LOSCFG_USER_TEST_PROCESS_FS = false
if (defined(LOSCFG_PROC_PROCESS_DIR)) { if (defined(LOSCFG_PROC_PROCESS_DIR) || liteos_container_test_enable == true) {
LOSCFG_USER_TEST_PROCESS_FS = true LOSCFG_USER_TEST_PROCESS_FS = true
} }
...@@ -138,21 +142,27 @@ LOSCFG_USER_TEST_UTS_CONTAINER = false ...@@ -138,21 +142,27 @@ LOSCFG_USER_TEST_UTS_CONTAINER = false
LOSCFG_USER_TEST_MNT_CONTAINER = false LOSCFG_USER_TEST_MNT_CONTAINER = false
LOSCFG_USER_TEST_IPC_CONTAINER = false LOSCFG_USER_TEST_IPC_CONTAINER = false
LOSCFG_USER_TEST_TIME_CONTAINER = false LOSCFG_USER_TEST_TIME_CONTAINER = false
if (defined(LOSCFG_KERNEL_CONTAINER)) { if (defined(LOSCFG_KERNEL_CONTAINER) || liteos_container_test_enable == true) {
LOSCFG_USER_TEST_CONTAINER = true LOSCFG_USER_TEST_CONTAINER = true
if (defined(LOSCFG_PID_CONTAINER)) { if (defined(LOSCFG_PID_CONTAINER) || liteos_container_test_enable == true) {
LOSCFG_USER_TEST_PID_CONTAINER = true LOSCFG_USER_TEST_PID_CONTAINER = true
} }
if (defined(LOSCFG_UTS_CONTAINER)) { if (defined(LOSCFG_UTS_CONTAINER) || liteos_container_test_enable == true) {
LOSCFG_USER_TEST_UTS_CONTAINER = true LOSCFG_USER_TEST_UTS_CONTAINER = true
} }
if (defined(LOSCFG_MNT_CONTAINER)) { if (defined(LOSCFG_MNT_CONTAINER) || liteos_container_test_enable == true) {
LOSCFG_USER_TEST_MNT_CONTAINER = true LOSCFG_USER_TEST_MNT_CONTAINER = true
} }
if (defined(LOSCFG_IPC_CONTAINER)) { if (defined(LOSCFG_IPC_CONTAINER) || liteos_container_test_enable == true) {
LOSCFG_USER_TEST_IPC_CONTAINER = true LOSCFG_USER_TEST_IPC_CONTAINER = true
} }
if (defined(LOSCFG_TIME_CONTAINER)) { if (defined(LOSCFG_TIME_CONTAINER) || liteos_container_test_enable == true) {
LOSCFG_USER_TEST_TIME_CONTAINER = true LOSCFG_USER_TEST_TIME_CONTAINER = true
} }
} }
########## fuzz test ##########
LOSCFG_USER_FUZZ_TEST = false
if (liteos_fuzz_test_enable == true) {
LOSCFG_USER_FUZZ_TEST = true
}
...@@ -36,11 +36,7 @@ common_include_dirs = [ ...@@ -36,11 +36,7 @@ common_include_dirs = [
sources_entry = [ "$TEST_UNITTEST_DIR/container/It_container_test.cpp" ] sources_entry = [ "$TEST_UNITTEST_DIR/container/It_container_test.cpp" ]
sources_smoke = [ sources_smoke = [ "$TEST_UNITTEST_DIR/container/smoke/It_container_001.cpp" ]
"$TEST_UNITTEST_DIR/container/smoke/It_container_001.cpp",
"$TEST_UNITTEST_DIR/container/smoke/It_container_chroot_001.cpp",
"$TEST_UNITTEST_DIR/container/smoke/It_container_chroot_002.cpp",
]
sources_full = [] sources_full = []
...@@ -91,6 +87,8 @@ if (defined(LOSCFG_USER_TEST_UTS_CONTAINER)) { ...@@ -91,6 +87,8 @@ if (defined(LOSCFG_USER_TEST_UTS_CONTAINER)) {
} }
if (defined(LOSCFG_USER_TEST_MNT_CONTAINER)) { if (defined(LOSCFG_USER_TEST_MNT_CONTAINER)) {
sources_smoke += [ sources_smoke += [
"$TEST_UNITTEST_DIR/container/smoke/It_container_chroot_001.cpp",
"$TEST_UNITTEST_DIR/container/smoke/It_container_chroot_002.cpp",
"$TEST_UNITTEST_DIR/container/smoke/It_mnt_container_001.cpp", "$TEST_UNITTEST_DIR/container/smoke/It_mnt_container_001.cpp",
"$TEST_UNITTEST_DIR/container/smoke/It_mnt_container_002.cpp", "$TEST_UNITTEST_DIR/container/smoke/It_mnt_container_002.cpp",
"$TEST_UNITTEST_DIR/container/smoke/It_mnt_container_003.cpp", "$TEST_UNITTEST_DIR/container/smoke/It_mnt_container_003.cpp",
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
import("//build/lite/config/test.gni") import("//build/lite/config/test.gni")
fuzztest("FuzzDemoTest") { fuzztest("liteos_a_user_fuzz_test") {
output_extension = "bin" output_extension = "bin"
sources = [ sources = [
"adjtime_fuzzer.cpp", "adjtime_fuzzer.cpp",
...@@ -83,6 +83,6 @@ fuzztest("FuzzDemoTest") { ...@@ -83,6 +83,6 @@ fuzztest("FuzzDemoTest") {
include_dirs = [] include_dirs = []
deps = [] deps = []
} }
group("fuzztest") { group("liteos_a_fuzztest") {
deps = [ ":FuzzDemoTest" ] deps = [ ":liteos_a_user_fuzz_test" ]
} }
...@@ -81,53 +81,11 @@ extern void TestSethostname(void); ...@@ -81,53 +81,11 @@ extern void TestSethostname(void);
int main() int main()
{ {
DT_Set_Report_Path("/storage/"); DT_Set_Report_Path("/storage/");
TestPosixSpawnFileActionsAddchdirNp();
TestPosixSpawnFileActionsAddopen();
TestPosixSpawnFileActionsAdddup2();
TestPosixSpawnFileActionsAddfchdirNp();
TestPosixSpawnFileActionsDestroy();
TestPosixSpawnFileActionsInit();
TestPosixSpawnattrDestroy();
TestPosixSpawnattrGetflags();
TestPosixSpawnattrGetpgroup();
TestPosixSpawnattrGetschedparam();
TestPosixSpawnattrGetschedpolicy();
TestPosixSpawnattrGetsigdefault();
TestPosixSpawnattrGetsigmask();
TestPosixSpawnattrInit();
TestPosixSpawnattrSetflags();
TestPosixSpawnattrSetpgroup();
TestPosixSpawnattrSetschedparam();
TestPosixSpawnattrSetschedpolicy();
TestPosixSpawnattrSetsigdefault();
TestPosixSpawnattrSetsigmask();
TestPosixSpawn();
TestPosixSpawnp();
TestSyslog();
TestSystem();
TestMlock();
TestMlockall();
TestAdjtime();
TestFesetenv();
TestGetrlimit();
TestReadlink(); TestReadlink();
TestReadlinkat(); TestReadlinkat();
TestTimes(); TestSethostname();
TestClone(); TestClone();
TestEpollCreate();
TestEpollCtl();
TestEpollWait();
TestPthreadMutexConsistent();
TestPthreadMutexGetprioceiling();
TestPthreadMutexattrSetprotocol();
TestPthreadMutexattrSetrobust();
TestPthreadMutexattrSettype();
TestPthreadSetconcurrency();
TestSetns();
TestSemOpen();
TestUnshare(); TestUnshare();
TestChroot(); TestChroot();
TestSethostname();
return 0; return 0;
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册