]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mm/mprotect: Fix do_mprotect_pkey() return on error maple_for6.5_unstable
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 13:18:09 +0000 (09:18 -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 b9da9a5f87fe9290cc5f38ce1e45c27e4c750ef3..6d0b55607b9ed9dce59c92e341c11db590a5aa1f 100644 (file)
@@ -803,6 +803,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;
@@ -869,7 +870,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: