Message ID | 20181211053409.20317-1-peterx@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] userfaultfd: clear flag if remap event not enabled | expand |
> On Dec 10, 2018, at 10:34 PM, Peter Xu <peterx@redhat.com> wrote: > > --- > fs/userfaultfd.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c > index cd58939dc977..4567b5b6fd32 100644 > --- a/fs/userfaultfd.c > +++ b/fs/userfaultfd.c > @@ -736,10 +736,18 @@ void mremap_userfaultfd_prep(struct vm_area_struct *vma, > struct userfaultfd_ctx *ctx; > > ctx = vma->vm_userfaultfd_ctx.ctx; > - if (ctx && (ctx->features & UFFD_FEATURE_EVENT_REMAP)) { > + > + if (!ctx) > + return; > + > + if (ctx->features & UFFD_FEATURE_EVENT_REMAP) { > vm_ctx->ctx = ctx; > userfaultfd_ctx_get(ctx); > WRITE_ONCE(ctx->mmap_changing, true); > + } else { > + /* Drop uffd context if remap feature not enabled */ > + vma->vm_userfaultfd_ctx = NULL_VM_UFFD_CTX; > + vma->vm_flags &= ~(VM_UFFD_WP | VM_UFFD_MISSING); > } > } > > -- > 2.17.1 > Looks good. Reviewed-by: William Kucharski <william.kucharski@oracle.com>
diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c index cd58939dc977..4567b5b6fd32 100644 --- a/fs/userfaultfd.c +++ b/fs/userfaultfd.c @@ -736,10 +736,18 @@ void mremap_userfaultfd_prep(struct vm_area_struct *vma, struct userfaultfd_ctx *ctx; ctx = vma->vm_userfaultfd_ctx.ctx; - if (ctx && (ctx->features & UFFD_FEATURE_EVENT_REMAP)) { + + if (!ctx) + return; + + if (ctx->features & UFFD_FEATURE_EVENT_REMAP) { vm_ctx->ctx = ctx; userfaultfd_ctx_get(ctx); WRITE_ONCE(ctx->mmap_changing, true); + } else { + /* Drop uffd context if remap feature not enabled */ + vma->vm_userfaultfd_ctx = NULL_VM_UFFD_CTX; + vma->vm_flags &= ~(VM_UFFD_WP | VM_UFFD_MISSING); } }