From e6eb21f55e4768f6cfbf09cedb0b35259bafcb4b Mon Sep 17 00:00:00 2001 From: hw_llm Date: Fri, 17 Jan 2025 19:51:01 +0800 Subject: [PATCH] =?UTF-8?q?Description:=20OsCopyUserParam=20kernel=20?= =?UTF-8?q?=E7=A9=BA=E9=97=B4=E6=93=8D=E4=BD=9C=E6=8E=A7=E5=88=B6=20IssueN?= =?UTF-8?q?o:=20https://gitee.com/openharmony/kernel=5Fliteos=5Fa/issues/I?= =?UTF-8?q?BIKPL=3Ffrom=3Dproject-issue=20Feature=20Or=20Bugfix:=20Bugfix?= =?UTF-8?q?=20Binary=20Source:=20No=20Signed-off-by:=20hw=5Fllm=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/extended/dynload/src/los_exec_elf.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/kernel/extended/dynload/src/los_exec_elf.c b/kernel/extended/dynload/src/los_exec_elf.c index 57d8969b..90bd24b9 100644 --- a/kernel/extended/dynload/src/los_exec_elf.c +++ b/kernel/extended/dynload/src/los_exec_elf.c @@ -90,6 +90,7 @@ STATIC INT32 OsCopyUserParam(ELFLoadInfo *loadInfo, const CHAR *fileName, CHAR * { UINT32 strLen; errno_t err; + static UINT32 userFirstInitFlag = 0; if (LOS_IsUserAddress((VADDR_T)(UINTPTR)fileName)) { err = LOS_StrncpyFromUser(kfileName, fileName, PATH_MAX + 1); @@ -99,7 +100,12 @@ STATIC INT32 OsCopyUserParam(ELFLoadInfo *loadInfo, const CHAR *fileName, CHAR * PRINT_ERR("%s[%d], filename len exceeds maxlen: %d\n", __FUNCTION__, __LINE__, PATH_MAX); return -ENAMETOOLONG; } - } else if (LOS_IsKernelAddress((VADDR_T)(UINTPTR)fileName)) { + } else if (LOS_IsKernelAddress((VADDR_T)(UINTPTR)fileName) && (userFirstInitFlag == 0)) { + /** + * the first user process is created by the function OsUserInit->execve(/bin/init) in the kernel space + * after the first user process is created, this branch should not enter again + */ + userFirstInitFlag = 1; strLen = strlen(fileName); err = memcpy_s(kfileName, PATH_MAX, fileName, strLen); if (err != EOK) { -- Gitee