diff options
-rw-r--r-- | fs/userfaultfd.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c index e211b99d33c4..89800fc7dc9d 100644 --- a/fs/userfaultfd.c +++ b/fs/userfaultfd.c | |||
@@ -735,10 +735,18 @@ void mremap_userfaultfd_prep(struct vm_area_struct *vma, | |||
735 | struct userfaultfd_ctx *ctx; | 735 | struct userfaultfd_ctx *ctx; |
736 | 736 | ||
737 | ctx = vma->vm_userfaultfd_ctx.ctx; | 737 | ctx = vma->vm_userfaultfd_ctx.ctx; |
738 | if (ctx && (ctx->features & UFFD_FEATURE_EVENT_REMAP)) { | 738 | |
739 | if (!ctx) | ||
740 | return; | ||
741 | |||
742 | if (ctx->features & UFFD_FEATURE_EVENT_REMAP) { | ||
739 | vm_ctx->ctx = ctx; | 743 | vm_ctx->ctx = ctx; |
740 | userfaultfd_ctx_get(ctx); | 744 | userfaultfd_ctx_get(ctx); |
741 | WRITE_ONCE(ctx->mmap_changing, true); | 745 | WRITE_ONCE(ctx->mmap_changing, true); |
746 | } else { | ||
747 | /* Drop uffd context if remap feature not enabled */ | ||
748 | vma->vm_userfaultfd_ctx = NULL_VM_UFFD_CTX; | ||
749 | vma->vm_flags &= ~(VM_UFFD_WP | VM_UFFD_MISSING); | ||
742 | } | 750 | } |
743 | } | 751 | } |
744 | 752 | ||