]> git.baikalelectronics.ru Git - kernel.git/commit
mm/gup: fix fixup_user_fault() on multiple retries
authorPeter Xu <peterx@redhat.com>
Thu, 14 May 2020 00:50:41 +0000 (17:50 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 14 May 2020 17:00:35 +0000 (10:00 -0700)
commitd473b847939eb97059c17d99dadec2ba3e2a2ebf
tree373f3598e3aab1c3067be1cc43714f0c440056ac
parent22e33faf0c0dc1bab63f94e6c19b04d91d1f0a90
mm/gup: fix fixup_user_fault() on multiple retries

This part was overlooked when reworking the gup code on multiple
retries.

When we get the 2nd+ retry, we'll be with TRIED flag set.  Current code
will bail out on the 2nd retry because the !TRIED check will fail so the
retry logic will be skipped.  What's worse is that, it will also return
zero which errornously hints the caller that the page is faulted in
while it's not.

The !TRIED flag check seems to not be needed even before the mutliple
retries change because if we get a VM_FAULT_RETRY, it must be the 1st
retry, and we should not have TRIED set for that.

Fix it by removing the !TRIED check, at the meantime check against fatal
signals properly before the page fault so we can still properly respond
to the user killing the process during retries.

Fixes: 53b1e6b7f47e ("mm/gup: allow VM_FAULT_RETRY for multiple times")
Reported-by: Randy Dunlap <rdunlap@infradead.org>
Signed-off-by: Peter Xu <peterx@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Cc: Alex Williamson <alex.williamson@redhat.com>
Cc: Brian Geffon <bgeffon@google.com>
Link: http://lkml.kernel.org/r/20200502003523.8204-1-peterx@redhat.com
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/gup.c