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 */