Description: VM Map 添加LiteIPC 保护

IssueNo: https://gitee.com/openharmony/kernel_liteos_a/issues/IASJLX
Feature Or Bugfix: Bugfix
Binary Source: No
Signed-off-by: hw_llm <liu.limin@huawei.com>
(cherry picked commit from <gitee.com//openharmony/kernel_liteos_a/commit/75af9e28d9e92398f71e2f884c53a2745e7cd097>
This commit is contained in:
hw_llm 2024-09-20 16:42:19 +08:00
parent 20820bd0f7
commit 07be40d1f3
4 changed files with 10 additions and 2 deletions

View File

@ -157,7 +157,8 @@ typedef struct VmSpace {
#define VM_MAP_REGION_FLAG_SHM (1<<16) #define VM_MAP_REGION_FLAG_SHM (1<<16)
#define VM_MAP_REGION_FLAG_FIXED (1<<17) #define VM_MAP_REGION_FLAG_FIXED (1<<17)
#define VM_MAP_REGION_FLAG_FIXED_NOREPLACE (1<<18) #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) STATIC INLINE UINT32 OsCvtProtFlagsToRegionFlags(unsigned long prot, unsigned long flags)
{ {

View File

@ -76,6 +76,8 @@ const CHAR *OsGetRegionNameOrFilePath(LosVmMapRegion *region)
return "MMAP"; return "MMAP";
} else if (region->regionFlags & VM_MAP_REGION_FLAG_SHM) { } else if (region->regionFlags & VM_MAP_REGION_FLAG_SHM) {
return "SHM"; return "SHM";
} else if (region->regionFlags & VM_MAP_REGION_FLAG_LITEIPC) {
return "LITEIPC";
} else { } else {
return ""; return "";
} }

View File

@ -273,6 +273,8 @@ STATIC UINT32 OsInheritOldRegionName(UINT32 oldRegionFlags)
vmFlags |= VM_MAP_REGION_FLAG_MMAP; vmFlags |= VM_MAP_REGION_FLAG_MMAP;
} else if (oldRegionFlags & VM_MAP_REGION_FLAG_SHM) { } else if (oldRegionFlags & VM_MAP_REGION_FLAG_SHM) {
vmFlags |= 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; return vmFlags;
@ -298,7 +300,9 @@ INT32 LOS_DoMprotect(VADDR_T vaddr, size_t len, unsigned long prot)
goto OUT_MPROTECT; 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; ret = -EPERM;
goto OUT_MPROTECT; goto OUT_MPROTECT;
} }

View File

@ -239,6 +239,7 @@ LITE_OS_SEC_TEXT STATIC int LiteIpcMmap(struct file *filep, LosVmMapRegion *regi
goto ERROR_MAP_OUT; goto ERROR_MAP_OUT;
} }
ipcInfo->pool.poolSize = region->range.size; ipcInfo->pool.poolSize = region->range.size;
region->regionFlags |= VM_MAP_REGION_FLAG_LITEIPC;
return 0; return 0;
ERROR_MAP_OUT: ERROR_MAP_OUT:
LOS_VFree(ipcInfo->pool.kvaddr); LOS_VFree(ipcInfo->pool.kvaddr);