From fbd121d28c54a0cdae8308e9489ab97a95393873 Mon Sep 17 00:00:00 2001 From: Masamichi Takagi Date: Tue, 16 Jun 2020 09:05:27 +0900 Subject: [PATCH] mmap: return -EINVAL for non-anonymous, MAP_HUGETLB map Change-Id: I2bcbbf0ee9c0f47160eabac4a8d09991c71fe852 --- arch/arm64/kernel/syscall.c | 8 ++++++++ arch/x86_64/kernel/syscall.c | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/arch/arm64/kernel/syscall.c b/arch/arm64/kernel/syscall.c index 6d4e676a..4bfe6bd8 100644 --- a/arch/arm64/kernel/syscall.c +++ b/arch/arm64/kernel/syscall.c @@ -1726,6 +1726,14 @@ SYSCALL_DECLARE(mmap) if (flags & MAP_HUGETLB) { int hugeshift = flags & (0x3F << MAP_HUGE_SHIFT); + /* OpenMPI expects -EINVAL when trying to map + * /dev/shm/ file with MAP_SHARED | MAP_HUGETLB + */ + if (!(flags & MAP_ANONYMOUS)) { + error = -EINVAL; + goto out; + } + if (hugeshift == 0) { /* default hugepage size */ flags |= ihk_mc_get_linux_default_huge_page_shift() << diff --git a/arch/x86_64/kernel/syscall.c b/arch/x86_64/kernel/syscall.c index e8bbb30d..fe207f47 100644 --- a/arch/x86_64/kernel/syscall.c +++ b/arch/x86_64/kernel/syscall.c @@ -1430,6 +1430,14 @@ SYSCALL_DECLARE(mmap) /* check arguments */ pgsize = PAGE_SIZE; if (flags & MAP_HUGETLB) { + /* OpenMPI expects -EINVAL when trying to map + * /dev/shm/ file with MAP_SHARED | MAP_HUGETLB + */ + if (!(flags & MAP_ANONYMOUS)) { + error = -EINVAL; + goto out; + } + switch (flags & (0x3F << MAP_HUGE_SHIFT)) { case 0: /* default hugepage size */