]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mm/mprotect: Fix do_mprotect_pkey() return on error mempolicy_fix
authorLiam R. Howlett <Liam.Howlett@oracle.com>
Wed, 5 Apr 2023 15:57:56 +0000 (11:57 -0400)
committerLiam R. Howlett <Liam.Howlett@oracle.com>
Thu, 6 Apr 2023 15:09:34 +0000 (11:09 -0400)
When the loop over the VMA is terminated early due to an error, the
return code could be overwritten with ENOMEM.  Fix this by only setting
the error code when it is not set already.

Fixes: 2286a6914c77 ("mm: change mprotect_fixup to vma iterator")
Cc: <stable@vger.kernel.org>
Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
mm/mprotect.c

index 53308a5ccf9242363a753b3bf04a8719b72444dc..7399bd7de49a630e9a7afe45bb2b276e3a818e50 100644 (file)
@@ -801,6 +801,7 @@ static int do_mprotect_pkey(unsigned long start, size_t len,
        tlb_gather_mmu(&tlb, current->mm);
        nstart = start;
        tmp = vma->vm_start;
+       error = 0;
        for_each_vma_range(vmi, vma, end) {
                unsigned long mask_off_old_flags;
                unsigned long newflags;
@@ -867,7 +868,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: