From e4a06623ceb49b5bead60d45c0534db88b9c666f Mon Sep 17 00:00:00 2001 From: Leon Chan Date: Thu, 30 Sep 2021 14:29:28 +0800 Subject: [PATCH] fix: change the execFile field in TCB to execVnode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TEE需要借用TCB中的execFile来校验打开的文件,pagecache修改后,可执行程序在mmap之后,会被立即关闭,因此将execFile改为execVnode close: #I4CLL9 Signed-off-by: Leon Chan --- fs/vfs/vnode.c | 1 - kernel/base/include/los_process_pri.h | 2 +- kernel/extended/dynload/src/los_load_elf.c | 4 +++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/fs/vfs/vnode.c b/fs/vfs/vnode.c index 9dd3a095..c5933a33 100644 --- a/fs/vfs/vnode.c +++ b/fs/vfs/vnode.c @@ -434,7 +434,6 @@ int VnodeLookupAt(const char *path, struct Vnode **result, uint32_t flags, struc currentVnode->filePath[vnodePathLen] = 0; } } - return ret; OUT_FREE_PATH: if (normalizedPath) { diff --git a/kernel/base/include/los_process_pri.h b/kernel/base/include/los_process_pri.h index 2edf4b56..2b64fb57 100644 --- a/kernel/base/include/los_process_pri.h +++ b/kernel/base/include/los_process_pri.h @@ -121,7 +121,7 @@ typedef struct ProcessCB { TimerIdMap timerIdMap; #endif #ifdef LOSCFG_DRIVERS_TZDRIVER - struct file *execFile; /**< Exec bin of the process */ + struct Vnode *execVnode; /**< Exec bin of the process */ #endif mode_t umask; #ifdef LOSCFG_KERNEL_CPUP diff --git a/kernel/extended/dynload/src/los_load_elf.c b/kernel/extended/dynload/src/los_load_elf.c index b565a21b..dcd5d291 100644 --- a/kernel/extended/dynload/src/los_load_elf.c +++ b/kernel/extended/dynload/src/los_load_elf.c @@ -223,12 +223,14 @@ STATIC INT32 OsReadEhdr(const CHAR *fileName, ELFInfo *elfInfo, BOOL isExecFile) #ifdef LOSCFG_DRIVERS_TZDRIVER if (isExecFile) { - ret = fs_getfilep(GetAssociatedSystemFd(elfInfo->procfd), &OsCurrProcessGet()->execFile); + struct file *filep; + ret = fs_getfilep(GetAssociatedSystemFd(elfInfo->procfd), &filep); if (ret) { PRINT_ERR("%s[%d], Failed to get struct file %s!\n", __FUNCTION__, __LINE__, fileName); /* File will be closed by OsLoadELFFile */ return ret; } + OsCurrProcessGet()->execVnode = filep->f_vnode; } #endif ret = OsReadELFInfo(elfInfo->procfd, (UINT8 *)&elfInfo->elfEhdr, sizeof(LD_ELF_EHDR), 0); -- GitLab