mm/mprotect: fix do_mprotect_pkey() return on error
When the loop over the VMA is terminated early due to an error, the return
code could be overwritten with ENOMEM. Fix the return code by only
setting the error on early loop termination when the error is not set.
User-visible effects include: attempts to run mprotect() against a
special mapping or with a poorly-aligned hugetlb address should return
-EINVAL, but they presently return -ENOMEM. In other cases an -EACCESS
should be returned.
Link: https://lkml.kernel.org/r/20230406193050.1363476-1-Liam.Howlett@oracle.com
Fixes: 2286a6914c
("mm: change mprotect_fixup to vma iterator")
Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
Родитель
dd47ac428c
Коммит
82f951340f
|
@ -838,7 +838,7 @@ static int do_mprotect_pkey(unsigned long start, size_t len,
|
|||
}
|
||||
tlb_finish_mmu(&tlb);
|
||||
|
||||
if (vma_iter_end(&vmi) < end)
|
||||
if (!error && vma_iter_end(&vmi) < end)
|
||||
error = -ENOMEM;
|
||||
|
||||
out:
|
||||
|
|
Загрузка…
Ссылка в новой задаче