userfaultfd: check VM_MAYWRITE was set after verifying the uffd is registered
Subsystems (2)
PATCH 9/11 userfaultfd: check VM_MAYWRITE was set after verifying the uffd is registered
From: Andrea Arcangeli <[email protected]>
Subject: userfaultfd: check VM_MAYWRITE was set after verifying the uffd is registered
Calling UFFDIO_UNREGISTER on virtual ranges not yet registered in uffd could trigger an harmless false positive WARN_ON. Check the vma is already registered before checking VM_MAYWRITE to shut off the false positive warning.
Cc <[email protected]>
Fixes 29ec90660d68 ("userfaultfd: shmem/hugetlbfs: only allow to register VM_MAYWRITE vmas")
Signed-off-by Andrea Arcangeli <[email protected]>
Reported-by [email protected]
Acked-by Mike Rapoport <[email protected]>
Acked-by Hugh Dickins <[email protected]>
Acked-by Peter Xu <[email protected]>
Signed-off-by Andrew Morton <[email protected]>
---
fs/userfaultfd.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
fs/userfaultfd.c renamed from fs/userfaultfd.c~userfaultfd-check-vm_maywrite-was-set-after-verifying-the-uffd-is-registered +2 -1
@@ -1566,7 +1566,6 @@ static int userfaultfd_unregister(structcond_resched ();BUG_ON (!vma_can_userfault (vma)); -WARN_ON (!(vma->vm_flags &VM_MAYWRITE ));/* * Nothing to do: this vma is already registered into this
@@ -1575,6 +1574,8 @@ static int userfaultfd_unregister(structif (!vma->vm_userfaultfd_ctx.ctx) goto skip; +WARN_ON (!(vma->vm_flags &VM_MAYWRITE )); +if (vma->vm_start > start) start = vma->vm_start; vma_end =min (end, vma->vm_end);
_