]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
mm/mprotect: Fix successful vma_merge() of next in do_mprotect_pkey()
authorLiam R. Howlett <Liam.Howlett@oracle.com>
Fri, 24 Feb 2023 21:20:55 +0000 (16:20 -0500)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 26 Feb 2023 04:16:48 +0000 (20:16 -0800)
If mprotect_fixup() successfully calls vma_merge() and replaces vma and
the next vma, then the tmp variable in the do_mprotect_pkey() is not
updated to point to the new vma end.  This results in the loop detecting
a gap between VMAs that does not exist.

Fix the faulty value of tmp by setting it to the end location of the vma
iterator at the end of the loop.

Link: https://lkml.kernel.org/r/20230224212055.1786100-1-Liam.Howlett@oracle.com
Fixes: 2286a6914c77 ("mm: change mprotect_fixup to vma iterator")
Link: https://lore.kernel.org/linux-mm/20230223120407.729110a6ecd1416ac59d9cb0@linux-foundation.org/
Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
Reported-by: Bert Karwatzki <spasswolf@web.de>
Link: https://bugzilla.kernel.org/show_bug.cgi?id=217061
Tested-by: Bert Karwatzki <spasswolf@web.de>
Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
Link: https://lore.kernel.org/linux-mm/CAHk-=wjFmVL7NiuxL54qLkoabni_yD-oF9=dpDgETtdsiCbhUg@mail.gmail.com/
Tested-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/mprotect.c

index 1d4843c97c2a1f97a97dde4608ebf1ea74878f47..231929f119d958f73aba0680b6ed8bae8493b35d 100644 (file)
@@ -832,6 +832,7 @@ static int do_mprotect_pkey(unsigned long start, size_t len,
                if (error)
                        break;
 
+               tmp = vma_iter_end(&vmi);
                nstart = tmp;
                prot = reqprot;
        }