stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Andrea Arcangeli <aarcange@redhat.com>,
	syzbot <syzkaller@googlegroups.com>,
	Mike Rapoport <rppt@linux.vnet.ibm.com>,
	Eric Biggers <ebiggers3@gmail.com>,
	Dmitry Vyukov <dvyukov@google.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Linus Torvalds <torvalds@linux-foundation.org>
Subject: [PATCH 4.14 11/38] userfaultfd: clear the vma->vm_userfaultfd_ctx if UFFD_EVENT_FORK fails
Date: Mon,  8 Jan 2018 13:59:04 +0100	[thread overview]
Message-ID: <20180108125916.672753880@linuxfoundation.org> (raw)
In-Reply-To: <20180108125915.951963528@linuxfoundation.org>

4.14-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Andrea Arcangeli <aarcange@redhat.com>

commit 0cbb4b4f4c44f54af268969b18d8deda63aded59 upstream.

The previous fix in commit 384632e67e08 ("userfaultfd: non-cooperative:
fix fork use after free") corrected the refcounting in case of
UFFD_EVENT_FORK failure for the fork userfault paths.

That still didn't clear the vma->vm_userfaultfd_ctx of the vmas that
were set to point to the aborted new uffd ctx earlier in
dup_userfaultfd.

Link: http://lkml.kernel.org/r/20171223002505.593-2-aarcange@redhat.com
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com>
Reported-by: syzbot <syzkaller@googlegroups.com>
Reviewed-by: Mike Rapoport <rppt@linux.vnet.ibm.com>
Cc: Eric Biggers <ebiggers3@gmail.com>
Cc: Dmitry Vyukov <dvyukov@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 fs/userfaultfd.c |   20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

--- a/fs/userfaultfd.c
+++ b/fs/userfaultfd.c
@@ -570,11 +570,14 @@ out:
 static void userfaultfd_event_wait_completion(struct userfaultfd_ctx *ctx,
 					      struct userfaultfd_wait_queue *ewq)
 {
+	struct userfaultfd_ctx *release_new_ctx;
+
 	if (WARN_ON_ONCE(current->flags & PF_EXITING))
 		goto out;
 
 	ewq->ctx = ctx;
 	init_waitqueue_entry(&ewq->wq, current);
+	release_new_ctx = NULL;
 
 	spin_lock(&ctx->event_wqh.lock);
 	/*
@@ -601,8 +604,7 @@ static void userfaultfd_event_wait_compl
 				new = (struct userfaultfd_ctx *)
 					(unsigned long)
 					ewq->msg.arg.reserved.reserved1;
-
-				userfaultfd_ctx_put(new);
+				release_new_ctx = new;
 			}
 			break;
 		}
@@ -617,6 +619,20 @@ static void userfaultfd_event_wait_compl
 	__set_current_state(TASK_RUNNING);
 	spin_unlock(&ctx->event_wqh.lock);
 
+	if (release_new_ctx) {
+		struct vm_area_struct *vma;
+		struct mm_struct *mm = release_new_ctx->mm;
+
+		/* the various vma->vm_userfaultfd_ctx still points to it */
+		down_write(&mm->mmap_sem);
+		for (vma = mm->mmap; vma; vma = vma->vm_next)
+			if (vma->vm_userfaultfd_ctx.ctx == release_new_ctx)
+				vma->vm_userfaultfd_ctx = NULL_VM_UFFD_CTX;
+		up_write(&mm->mmap_sem);
+
+		userfaultfd_ctx_put(release_new_ctx);
+	}
+
 	/*
 	 * ctx may go away after this if the userfault pseudo fd is
 	 * already released.

  parent reply	other threads:[~2018-01-08 13:01 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-08 12:58 [PATCH 4.14 00/38] 4.14.13-stable review Greg Kroah-Hartman
2018-01-08 12:58 ` [PATCH 4.14 01/38] x86/mm: Set MODULES_END to 0xffffffffff000000 Greg Kroah-Hartman
2018-01-08 12:58 ` [PATCH 4.14 02/38] x86/mm: Map cpu_entry_area at the same place on 4/5 level Greg Kroah-Hartman
2018-01-08 12:58 ` [PATCH 4.14 03/38] x86/kaslr: Fix the vaddr_end mess Greg Kroah-Hartman
2018-01-08 12:58 ` [PATCH 4.14 04/38] x86/events/intel/ds: Use the proper cache flush method for mapping ds buffers Greg Kroah-Hartman
2018-01-08 12:58 ` [PATCH 4.14 05/38] x86/tlb: Drop the _GPL from the cpu_tlbstate export Greg Kroah-Hartman
2018-01-08 12:58 ` [PATCH 4.14 06/38] x86/alternatives: Add missing \n at end of ALTERNATIVE inline asm Greg Kroah-Hartman
2018-01-08 12:59 ` [PATCH 4.14 07/38] x86/pti: Rename BUG_CPU_INSECURE to BUG_CPU_MELTDOWN Greg Kroah-Hartman
2018-01-08 12:59 ` [PATCH 4.14 08/38] kernel/acct.c: fix the acct->needcheck check in check_free_space() Greg Kroah-Hartman
2018-01-08 12:59 ` [PATCH 4.14 09/38] mm/mprotect: add a cond_resched() inside change_pmd_range() Greg Kroah-Hartman
2018-01-08 12:59 ` [PATCH 4.14 10/38] mm/sparse.c: wrong allocation for mem_section Greg Kroah-Hartman
2018-01-08 12:59 ` Greg Kroah-Hartman [this message]
2018-01-08 12:59 ` [PATCH 4.14 12/38] btrfs: fix refcount_t usage when deleting btrfs_delayed_nodes Greg Kroah-Hartman
2018-01-08 12:59 ` [PATCH 4.14 13/38] efi/capsule-loader: Reinstate virtual capsule mapping Greg Kroah-Hartman
2018-01-08 12:59 ` [PATCH 4.14 14/38] crypto: n2 - cure use after free Greg Kroah-Hartman
2018-01-08 12:59 ` [PATCH 4.14 15/38] crypto: chacha20poly1305 - validate the digest size Greg Kroah-Hartman
2018-01-08 12:59 ` [PATCH 4.14 16/38] crypto: pcrypt - fix freeing pcrypt instances Greg Kroah-Hartman
2018-01-08 12:59 ` [PATCH 4.14 17/38] crypto: chelsio - select CRYPTO_GF128MUL Greg Kroah-Hartman
2018-01-08 12:59 ` [PATCH 4.14 21/38] fscache: Fix the default for fscache_maybe_release_page() Greg Kroah-Hartman
2018-01-08 12:59 ` [PATCH 4.14 22/38] x86 / CPU: Avoid unnecessary IPIs in arch_freq_get_on_cpu() Greg Kroah-Hartman
2018-01-08 12:59 ` [PATCH 4.14 23/38] x86 / CPU: Always show current CPU frequency in /proc/cpuinfo Greg Kroah-Hartman
2018-01-08 12:59 ` [PATCH 4.14 24/38] kernel/signal.c: protect the traced SIGNAL_UNKILLABLE tasks from SIGKILL Greg Kroah-Hartman
2018-01-08 12:59 ` [PATCH 4.14 25/38] kernel/signal.c: protect the SIGNAL_UNKILLABLE tasks from !sig_kernel_only() signals Greg Kroah-Hartman
2018-01-08 12:59 ` [PATCH 4.14 26/38] kernel/signal.c: remove the no longer needed SIGNAL_UNKILLABLE check in complete_signal() Greg Kroah-Hartman
2018-01-08 12:59 ` [PATCH 4.14 27/38] iommu/arm-smmu-v3: Dont free page table ops twice Greg Kroah-Hartman
2018-01-08 12:59 ` [PATCH 4.14 28/38] iommu/arm-smmu-v3: Cope with duplicated Stream IDs Greg Kroah-Hartman
2018-01-08 12:59 ` [PATCH 4.14 29/38] ARC: uaccess: dont use "l" gcc inline asm constraint modifier Greg Kroah-Hartman
2018-01-08 12:59 ` [PATCH 4.14 30/38] powerpc/mm: Fix SEGV on mapped region to return SEGV_ACCERR Greg Kroah-Hartman
2018-01-08 12:59 ` [PATCH 4.14 31/38] Input: elantech - add new icbody type 15 Greg Kroah-Hartman
2018-01-08 12:59 ` [PATCH 4.14 32/38] x86/microcode/AMD: Add support for fam17h microcode loading Greg Kroah-Hartman
2018-01-08 12:59 ` [PATCH 4.14 34/38] parisc: Fix alignment of pa_tlb_lock in assembly on 32-bit SMP kernel Greg Kroah-Hartman
2018-01-08 12:59 ` [PATCH 4.14 35/38] parisc: qemu idle sleep support Greg Kroah-Hartman
2018-01-08 12:59 ` [PATCH 4.14 37/38] KVM: s390: fix cmma migration for multiple memory slots Greg Kroah-Hartman
2018-01-08 12:59 ` [PATCH 4.14 38/38] KVM: s390: prevent buffer overrun on memory hotplug during migration Greg Kroah-Hartman
2018-01-08 20:59 ` [PATCH 4.14 00/38] 4.14.13-stable review Shuah Khan
2018-01-09  9:11   ` Greg Kroah-Hartman
2018-01-09  8:45 ` Naresh Kamboju
2018-01-09  9:27   ` Greg Kroah-Hartman
2018-01-09 13:45 ` Guenter Roeck
2018-01-09 19:07   ` Greg Kroah-Hartman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180108125916.672753880@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=aarcange@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=dvyukov@google.com \
    --cc=ebiggers3@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rppt@linux.vnet.ibm.com \
    --cc=stable@vger.kernel.org \
    --cc=syzkaller@googlegroups.com \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).