X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=fs%2Fuserfaultfd.c;h=d473e6e07a7e66a05860347b578e0854c92e1805;hb=2d43f4dc414d8b6b8d0320ed0905d0f1ab53920c;hp=50311703135bc8c699bcc3d26d0b9aa24b5277f3;hpb=75021d28594d9b6fb4d05bbc41f77948a0db0e02;p=firefly-linux-kernel-4.4.55.git diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c index 50311703135b..d473e6e07a7e 100644 --- a/fs/userfaultfd.c +++ b/fs/userfaultfd.c @@ -286,6 +286,12 @@ int handle_userfault(struct vm_area_struct *vma, unsigned long address, if (unlikely(ACCESS_ONCE(ctx->released))) goto out; + /* + * We don't do userfault handling for the final child pid update. + */ + if (current->flags & PF_EXITING) + goto out; + /* * Check that we can return VM_FAULT_RETRY. * @@ -451,7 +457,8 @@ static int userfaultfd_release(struct inode *inode, struct file *file) new_flags, vma->anon_vma, vma->vm_file, vma->vm_pgoff, vma_policy(vma), - NULL_VM_UFFD_CTX); + NULL_VM_UFFD_CTX, + vma_get_anon_name(vma)); if (prev) vma = prev; else @@ -827,7 +834,8 @@ static int userfaultfd_register(struct userfaultfd_ctx *ctx, prev = vma_merge(mm, prev, start, vma_end, new_flags, vma->anon_vma, vma->vm_file, vma->vm_pgoff, vma_policy(vma), - ((struct vm_userfaultfd_ctx){ ctx })); + ((struct vm_userfaultfd_ctx){ ctx }), + vma_get_anon_name(vma)); if (prev) { vma = prev; goto next; @@ -961,7 +969,8 @@ static int userfaultfd_unregister(struct userfaultfd_ctx *ctx, prev = vma_merge(mm, prev, start, vma_end, new_flags, vma->anon_vma, vma->vm_file, vma->vm_pgoff, vma_policy(vma), - NULL_VM_UFFD_CTX); + NULL_VM_UFFD_CTX, + vma_get_anon_name(vma)); if (prev) { vma = prev; goto next;