From bc81d362b4d2c5edb66053c2adf737066f84b75d Mon Sep 17 00:00:00 2001 From: Masamichi Takagi Date: Thu, 25 Apr 2019 15:31:55 +0900 Subject: [PATCH] madvise: MADV_HUGEPAGE, MADV_NOHUGEPAGE: Fix error check * Returns -EINVAL except for hugeobj and shmobj * Fixes ostest-madvise.012 and ostest-madvise.013 Change-Id: Id1f1d6cc0c81edd204228ce5f75b641985e70cee --- kernel/syscall.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/kernel/syscall.c b/kernel/syscall.c index ce9e208c..2bb84479 100644 --- a/kernel/syscall.c +++ b/kernel/syscall.c @@ -4781,11 +4781,11 @@ SYSCALL_DECLARE(madvise) default: case MADV_MERGEABLE: case MADV_UNMERGEABLE: - case MADV_NOHUGEPAGE: error = -EINVAL; break; case MADV_HUGEPAGE: + case MADV_NOHUGEPAGE: case MADV_NORMAL: case MADV_RANDOM: case MADV_SEQUENTIAL: @@ -4869,6 +4869,13 @@ SYSCALL_DECLARE(madvise) goto out; } + /* only hugetlbfs and shm map support hugepage */ + if ((advice == MADV_HUGEPAGE || advice == MADV_NOHUGEPAGE) + && !(range->memobj->flags & (MF_HUGETLBFS | MF_SHM))) { + error = -EINVAL; + goto out; + } + s = start; if (s < range->start) { s = range->start;