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)) {