mm/mlock: fix vma iterator conversion of apply_vma_lock_flags()
authorLiam R. Howlett <Liam.Howlett@oracle.com>
Tue, 11 Jul 2023 17:50:20 +0000 (13:50 -0400)
committerAndrew Morton <akpm@linux-foundation.org>
Mon, 17 Jul 2023 19:53:21 +0000 (12:53 -0700)
commit2658f94d679243209889cdfa8de3743cde1abea9
tree4d45ea9c8bc5d8b29f7b21cd7d7bc3c90c481ecd
parent636e348353a7cc52609fdba5ff3270065da140d5
mm/mlock: fix vma iterator conversion of apply_vma_lock_flags()

apply_vma_lock_flags() calls mlock_fixup(), which could merge the VMA
after where the vma iterator is located.  Although this is not an issue,
the next iteration of the loop will check the start of the vma to be equal
to the locally saved 'tmp' variable and cause an incorrect failure
scenario.  Fix the error by setting tmp to the end of the vma iterator
value before restarting the loop.

There is also a potential of the error code being overwritten when the
loop terminates early.  Fix the return issue by directly returning when an
error is encountered since there is nothing to undo after the loop.

Link: https://lkml.kernel.org/r/20230711175020.4091336-1-Liam.Howlett@oracle.com
Fixes: 37598f5a9d8b ("mlock: convert mlock to vma iterator")
Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
Reported-by: Ryan Roberts <ryan.roberts@arm.com>
Link: https://lore.kernel.org/linux-mm/50341ca1-d582-b33a-e3d0-acb08a65166f@arm.com/
Tested-by: Ryan Roberts <ryan.roberts@arm.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/mlock.c