From 37ea770f8c75e122c0141aedfb9cd191a1f50e4a Mon Sep 17 00:00:00 2001 From: Ken Sato Date: Wed, 25 Sep 2019 22:19:57 +0900 Subject: [PATCH] mmap: Round up map size by pagesize when specified MAP_HUGETLB To match the behavior of Linux. Change-Id: I7bcc2cb3c1e678ffc28f6b825c7a55032441dded --- arch/arm64/kernel/syscall.c | 4 +++- arch/x86_64/kernel/syscall.c | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/arch/arm64/kernel/syscall.c b/arch/arm64/kernel/syscall.c index a5df627b..ad135b64 100644 --- a/arch/arm64/kernel/syscall.c +++ b/arch/arm64/kernel/syscall.c @@ -1934,7 +1934,7 @@ SYSCALL_DECLARE(mmap) ; const uintptr_t addr0 = ihk_mc_syscall_arg0(ctx); - const size_t len0 = ihk_mc_syscall_arg1(ctx); + size_t len0 = ihk_mc_syscall_arg1(ctx); const int prot = ihk_mc_syscall_arg2(ctx); const int flags0 = ihk_mc_syscall_arg3(ctx); const int fd = ihk_mc_syscall_arg4(ctx); @@ -1993,6 +1993,8 @@ SYSCALL_DECLARE(mmap) goto out; } pgsize = (size_t)1 << ((flags >> MAP_HUGE_SHIFT) & 0x3F); + /* Round-up map length by pagesize */ + len0 = ALIGN(len0, pgsize); if (rusage_check_overmap(len0, (flags >> MAP_HUGE_SHIFT) & 0x3F)) { diff --git a/arch/x86_64/kernel/syscall.c b/arch/x86_64/kernel/syscall.c index a3d8c935..602dcf1c 100644 --- a/arch/x86_64/kernel/syscall.c +++ b/arch/x86_64/kernel/syscall.c @@ -1668,7 +1668,7 @@ SYSCALL_DECLARE(mmap) ; const uintptr_t addr0 = ihk_mc_syscall_arg0(ctx); - const size_t len0 = ihk_mc_syscall_arg1(ctx); + size_t len0 = ihk_mc_syscall_arg1(ctx); const int prot = ihk_mc_syscall_arg2(ctx); const int flags0 = ihk_mc_syscall_arg3(ctx); const int fd = ihk_mc_syscall_arg4(ctx); @@ -1725,6 +1725,8 @@ SYSCALL_DECLARE(mmap) } pgsize = (size_t)1 << ((flags >> MAP_HUGE_SHIFT) & 0x3F); + /* Round-up map length by pagesize */ + len0 = ALIGN(len0, pgsize); if (rusage_check_overmap(len0, (flags >> MAP_HUGE_SHIFT) & 0x3F)) {