From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=100.103.45.18 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1794585708; b=ihed3GPHcAbKjnZOXLX5gTp9ZvQ+AfCiVzPUxpj5RWKepNJb5BZjD9HAdJvjPrk6SlSA FmHtem0n/CfJAZCzVV7bh7krZDTRKGpelb0QrYjB+IX7pILmLvbOf2cs+2C/wx+yBHMQ8 QDkxPZ4P9EDtN1+vB6lWl9CodbzUjHsW+OL6AcUhEAsGYmhbs7Hw+anqHo5+SqAoEjqwN t58uARw6rkQEZB85c52QZyxpN0d6fQj/3BSGqMbTqFZ6bZlKMOXkg10TFAdxDGgLONrD2 rRANcj94NV9e8etC9K53HksOggl7yxfu9tmqTrtORGkyRwmNSNzBMsbpmXt6muhjaAA== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1794585708; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-ID:X-Mailer: In-Reply-To:References:User-Agent:X-stable:X-Patchwork-Hint: MIME-Version:Content-Transfer-Encoding; bh=pHEHwU4E4T5KdcXGrxW1/42ZHUuoLtHpoFsRFjKuxw8=; b=J+4V7LsAdJiPdhW0K42aphPY5d/kGMZGQwkUa+pFYj4bLU2K3DGkL6CLF6rLAhDBnwOw pyDAc1zz2iwgUI2wqL58KCABp4TA9iibdt+hGdeuHiovtXbomVT6DbzIgC6vRVhF5ABdg IAOYKOe7XDEgqvOdPocnLzcm1yCYl3T/hAN6qYrv8oMn6hr6YlrPjweGRtFISMvZti2lA sX/2biC0Oib9sfuxkZN6xKXMIjq9AGjNoaa/S0M02Ms3xcE4Bcxcu0GsFe1RlLiwRr65m eo34dXWIPvqw7eW24dyD2SZ8pOCrpBzGYhg3maFpPSWupLLTCFEi9UKQuNqjb0/8mSw== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass header.d=linuxfoundation.org header.i=@linuxfoundation.org header.a=rsa-sha256 header.s=korg header.b=h2MQLcol; arc=none smtp.remote-ip=100.103.45.18 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 063F260A3834; Fri, 13 Nov 2026 16:01:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.a=rsa-sha256 header.s=korg header.b=h2MQLcol Received: by smtp.kernel.org (Postfix) with ESMTPSA id A986E1F000C4; Fri, 13 Nov 2026 16:01:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxfoundation.org; s=korg; t=1794585707; bh=pHEHwU4E4T5KdcXGrxW1/42ZHUuoLtHpoFsRFjKuxw8=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=h2MQLcolQNTQ7DQ0f72Jp9WUkJPYHjb5Kr7kKuF19lp5XQl3217KrFNR9epOFvc1C mcVvx59gAUYJOOsPsuf+CXUqs/afdXJ4jJJlUDrFBYyCq6OIad6qi1JfZysLWYVRwQ 1ohO1D2/IENgfKPLvISMr7PDr2b4sbai+nierTDM= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Josef Bacik , "Mike Rapoport (Microsoft)" , "Lorenzo Stoakes (ARM)" , Muhammad Usama Anjum , "David Hildenbrand (Arm)" , Sasha Levin Subject: [PATCH 7.3 312/507] mm/userfaultfd: wake all waiters on unregister Date: Fri, 13 Nov 2026 10:50:16 -0500 Message-ID: <20261113153805.943578620@linuxfoundation.org> X-Mailer: git-send-email 2.56.0 In-Reply-To: <20261113153753.358973689@linuxfoundation.org> References: <20261113153753.358973689@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore X-Mailing-List: stable@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 7.3-stable review patch. If anyone has any objections, please let me know. ------------------ From: Josef Bacik [ Upstream commit 3afb19d68cc5e7851fdb1069c8094af97bd80417 ] UFFDIO_UNREGISTER only wakes pending faults if VM_UFFD_MISSING is set. Threads waiting on write-protect, minor or RWP faults can therefore remain asleep after unregistering a range that does not track missing faults. Wake pending faults regardless of the registration mode so they can retry without an explicit UFFDIO_WAKE or closing the userfaultfd. This matches the existing behavior for missing faults, including removing unread fault messages for the woken waiters. Fix generated by an LLM and sent by Josef Bacik in private. Fixes: 63b2d4174c4a ("userfaultfd: wp: add the writeprotect API to userfaultfd ioctl") Cc: stable@vger.kernel.org Signed-off-by: Josef Bacik [ david: rebase; simplify description ] Reviewed-by: Mike Rapoport (Microsoft) Reviewed-by: Lorenzo Stoakes (ARM) Tested-by: Muhammad Usama Anjum Link: https://patch.msgid.link/20261031-fixes_core-v3-24-d6437171ecc3@kernel.org Signed-off-by: David Hildenbrand (Arm) Signed-off-by: Sasha Levin --- mm/userfaultfd.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c index ddce409db0ad7..5689df692401e 100644 --- a/mm/userfaultfd.c +++ b/mm/userfaultfd.c @@ -4021,6 +4021,8 @@ static int userfaultfd_unregister(struct userfaultfd_ctx *ctx, ret = 0; for_each_vma_range(vmi, vma, end) { + struct userfaultfd_wake_range range; + cond_resched(); /* VMA not registered with userfaultfd. */ @@ -4038,18 +4040,14 @@ static int userfaultfd_unregister(struct userfaultfd_ctx *ctx, /* Prevent new userfaults from being queued after the wakeup. */ vma_start_write(vma); - if (userfaultfd_missing(vma)) { - /* - * Wake any concurrent pending userfault while - * we unregister, so they will not hang - * permanently and it avoids userland to call - * UFFDIO_WAKE explicitly. - */ - struct userfaultfd_wake_range range; - range.start = start; - range.len = vma_end - start; - wake_userfault(vma->vm_userfaultfd_ctx.ctx, &range); - } + /* + * Wake any concurrent pending userfault while we unregister, + * so they will not hang permanently and it avoids userland to + * call UFFDIO_WAKE explicitly. + */ + range.start = start; + range.len = vma_end - start; + wake_userfault(ctx, &range); vma = userfaultfd_clear_vma(&vmi, prev, vma, start, vma_end); -- 2.53.0