mm/mprotect: fix do_mprotect_pkey() return on error
authorLiam R. Howlett <Liam.Howlett@oracle.com>
Thu, 6 Apr 2023 19:30:50 +0000 (15:30 -0400)
committerAndrew Morton <akpm@linux-foundation.org>
Sun, 16 Apr 2023 17:41:24 +0000 (10:41 -0700)
commit82f951340f25bba262766f82caec54e7fd6a73c7
tree5d60ebbb9d88235c27cc1f0e73107d2228adda55
parentdd47ac428c3f5f3bcabe845f36be870fe6c20784
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: 2286a6914c77 ("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>
mm/mprotect.c