From 75af9e28d9e92398f71e2f884c53a2745e7cd097 Mon Sep 17 00:00:00 2001 From: hw_llm Date: Fri, 20 Sep 2024 16:42:19 +0800 Subject: [PATCH] =?UTF-8?q?Description:=20VM=20Map=20=E6=B7=BB=E5=8A=A0Lit?= =?UTF-8?q?eIPC=20=E4=BF=9D=E6=8A=A4=20IssueNo:=20https://gitee.com/openha?= =?UTF-8?q?rmony/kernel=5Fliteos=5Fa/issues/IASJFR=20Feature=20Or=20Bugfix?= =?UTF-8?q?:=20Bugfix=20Binary=20Source:=20No=20Signed-off-by:=20hw=5Fllm?= =?UTF-8?q?=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/base/include/los_vm_map.h | 3 ++- kernel/base/vm/los_vm_dump.c | 2 ++ kernel/base/vm/los_vm_syscall.c | 6 +++++- kernel/extended/liteipc/hm_liteipc.c | 1 + 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/kernel/base/include/los_vm_map.h b/kernel/base/include/los_vm_map.h index 344e1ad8..27145950 100644 --- a/kernel/base/include/los_vm_map.h +++ b/kernel/base/include/los_vm_map.h @@ -157,7 +157,8 @@ typedef struct VmSpace { #define VM_MAP_REGION_FLAG_SHM (1<<16) #define VM_MAP_REGION_FLAG_FIXED (1<<17) #define VM_MAP_REGION_FLAG_FIXED_NOREPLACE (1<<18) -#define VM_MAP_REGION_FLAG_INVALID (1<<19) /* indicates that flags are not specified */ +#define VM_MAP_REGION_FLAG_LITEIPC (1<<19) +#define VM_MAP_REGION_FLAG_INVALID (1<<20) /* indicates that flags are not specified */ STATIC INLINE UINT32 OsCvtProtFlagsToRegionFlags(unsigned long prot, unsigned long flags) { diff --git a/kernel/base/vm/los_vm_dump.c b/kernel/base/vm/los_vm_dump.c index f326ea12..aa6e005c 100644 --- a/kernel/base/vm/los_vm_dump.c +++ b/kernel/base/vm/los_vm_dump.c @@ -76,6 +76,8 @@ const CHAR *OsGetRegionNameOrFilePath(LosVmMapRegion *region) return "MMAP"; } else if (region->regionFlags & VM_MAP_REGION_FLAG_SHM) { return "SHM"; + } else if (region->regionFlags & VM_MAP_REGION_FLAG_LITEIPC) { + return "LITEIPC"; } else { return ""; } diff --git a/kernel/base/vm/los_vm_syscall.c b/kernel/base/vm/los_vm_syscall.c index 6aa23993..1347dae0 100644 --- a/kernel/base/vm/los_vm_syscall.c +++ b/kernel/base/vm/los_vm_syscall.c @@ -273,6 +273,8 @@ STATIC UINT32 OsInheritOldRegionName(UINT32 oldRegionFlags) vmFlags |= VM_MAP_REGION_FLAG_MMAP; } else if (oldRegionFlags & VM_MAP_REGION_FLAG_SHM) { vmFlags |= VM_MAP_REGION_FLAG_SHM; + } else if (oldRegionFlags & VM_MAP_REGION_FLAG_LITEIPC) { + vmFlags |= VM_MAP_REGION_FLAG_LITEIPC; } return vmFlags; @@ -298,7 +300,9 @@ INT32 LOS_DoMprotect(VADDR_T vaddr, size_t len, unsigned long prot) goto OUT_MPROTECT; } - if ((region->regionFlags & VM_MAP_REGION_FLAG_VDSO) || (region->regionFlags & VM_MAP_REGION_FLAG_HEAP)) { + if ((region->regionFlags & VM_MAP_REGION_FLAG_VDSO) || + (region->regionFlags & VM_MAP_REGION_FLAG_HEAP) || + (region->regionFlags & VM_MAP_REGION_FLAG_LITEIPC)) { ret = -EPERM; goto OUT_MPROTECT; } diff --git a/kernel/extended/liteipc/hm_liteipc.c b/kernel/extended/liteipc/hm_liteipc.c index 2f2fbf71..3671e1ee 100644 --- a/kernel/extended/liteipc/hm_liteipc.c +++ b/kernel/extended/liteipc/hm_liteipc.c @@ -239,6 +239,7 @@ LITE_OS_SEC_TEXT STATIC int LiteIpcMmap(struct file *filep, LosVmMapRegion *regi goto ERROR_MAP_OUT; } ipcInfo->pool.poolSize = region->range.size; + region->regionFlags |= VM_MAP_REGION_FLAG_LITEIPC; return 0; ERROR_MAP_OUT: LOS_VFree(ipcInfo->pool.kvaddr);