From patchwork Thu Sep 14 05:53:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Edward AD X-Patchwork-Id: 13384618 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 13D94EDE980 for ; Thu, 14 Sep 2023 05:53:23 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 72C0C6B02D1; Thu, 14 Sep 2023 01:53:23 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6DB406B02D2; Thu, 14 Sep 2023 01:53:23 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5C9956B02D3; Thu, 14 Sep 2023 01:53:23 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 4DAA66B02D1 for ; Thu, 14 Sep 2023 01:53:23 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 17FAC141008 for ; Thu, 14 Sep 2023 05:53:23 +0000 (UTC) X-FDA: 81234135486.06.F91039B Received: from mail3-166.sinamail.sina.com.cn (mail3-166.sinamail.sina.com.cn [202.108.3.166]) by imf08.hostedemail.com (Postfix) with ESMTP id 348C8160008 for ; Thu, 14 Sep 2023 05:53:18 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf08.hostedemail.com: domain of eadavis@sina.com designates 202.108.3.166 as permitted sender) smtp.mailfrom=eadavis@sina.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1694670801; a=rsa-sha256; cv=none; b=Xr1vX6qCf/2OW6YQbbNCumz2PT817DLad6gWmqxDZtimFlvZQ3jrTbEYBoIpCBrW18K0jo qBmoC3m3k+jJXYS7SENDBv+vHlW9NngoKzD3XZok35gYUc5lJAvHvGL3iF2UDGFxBl87fh TgSvII3hAjPRABQqiS+YeVz5tM8r3f4= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf08.hostedemail.com: domain of eadavis@sina.com designates 202.108.3.166 as permitted sender) smtp.mailfrom=eadavis@sina.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1694670801; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=WVEWRURx5aoOPTllOCgMpzJdxmcz7cZCk69I7LlSOZ0=; b=piISAziAhYdvgFZ1dBMzZXuHr/GW9Fk7epnTl8EDAWub/z+JA+dE5+v2SmXvtKveZ56bR1 14HbwrBcSQXrmvtWV3813k47EQu71yVJ59jVijCJuW2tMpFt39SYqJAPjBFm+ABflSmSsY ijbwPiW6m2KOpfVE5aV/nGgs04BvAJU= X-SMAIL-HELO: pek-lxu-l1.wrs.com Received: from unknown (HELO pek-lxu-l1.wrs.com)([111.198.228.56]) by sina.com (172.16.97.23) with ESMTP id 65029FC9000216F9; Thu, 14 Sep 2023 13:53:14 +0800 (CST) X-Sender: eadavis@sina.com X-Auth-ID: eadavis@sina.com X-SMAIL-MID: 59030431458597 X-SMAIL-UIID: 6CA756EA4A77410D88DFC3554C509A18-20230914-135314-1 From: Edward AD To: oliver.sang@intel.com Cc: akpm@linux-foundation.org, eadavis@sina.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org, lkp@intel.com, ltp@lists.linux.it, oe-lkp@lists.linux.dev, syzbot+b591856e0f0139f83023@syzkaller.appspotmail.com, syzkaller-bugs@googlegroups.com Subject: [PATCH] mm: extpand queue_pages_range() to find and lock the vma range Date: Thu, 14 Sep 2023 13:53:13 +0800 Message-ID: <20230914055313.151192-1-eadavis@sina.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <202309121302.8864096c-oliver.sang@intel.com> References: <202309121302.8864096c-oliver.sang@intel.com> MIME-Version: 1.0 X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: 348C8160008 X-Stat-Signature: b9mwsogbk4sxwdrz6ysu9wdrz3wc338r X-Rspam-User: X-HE-Tag: 1694670798-555525 X-HE-Meta: U2FsdGVkX18c4QMl0POU0qt3hfC/iwLQPOFXDs1Ww14OOl1KSxbPbF3K+0GfioU6B2dUd9+YCMffT6dWBsKOk2QVXBuDyAmDqPo8Aons8wJyTqlNYwy8mxdpYXUJrr7QkjmwKtyjR+4lYIJbexagQ/o6YeF98AsGWujmtXLCMTjppgX9BHoUURls+inoeecYfPImM8hTRR1z/d8ahjM6qh1Km+9iH9iIrlPLibZK6E0mwSGF0qDOB390fdgDNA/aUyxyIQPHXod+UmFX/UmHvwhdZmtvINcNWML5nLs4/jB5gS2Plwxo+MB+MXABEb67oMJ7+6EiGzTf3MfllFxE0z69DWFAkZtl3uHh2y8IJ+fvz1Hr7sbcavYYdkPKEFEvgRqTJ9gVt3d7ZQjemwGsc10Ma5k9+PuxZliATqSdf63+Ddxi7iQn3avC8VkxRH72ukQsGiCxee1PVS07/X+5TsSH1ggpfAXKgNGpCdpPMpmTUHTKCh7llPU/HkEMW3pyykFfWDNDRUWMGNoADe4CLsx7mbHi1baVPe2quGMbkN0xhHSIlkgb/XQkDCO3ITrcv0aHvULvWa/75ALzq4rLHNqi508dfL8JhXRDZ6CgPs4ufUZ+1zW7BmZwM0NVG2V5qURGxjSW2sYHVvmYC+ZnUBGI7Vlzs54nIMTVQM7XxSKD0dcgrVnJ/5zarD15mLCg7ADjf+HRVlM0Mh6y039tMsdVCdNb2IC/h7dYtP2oEDjdUNaU7C6hOhynW3A9eHsjUM8nLPQGZMQAAAKAFrRjE2hcS1hrSfUpeuCNnFGR2KresebGjw3aBHhw1Kx3CyGPcXwLgdtyvTutGaXHPkLIg33AHdP3OhdCg7idBxF42PtVa5MF4JfST1o76FFn6fmD0r6tgyeYQYDFituEsPkVccdIkmbVSVgUg/KTOdp26siYi9YMUmAiRMMqpKBZDpBAYAytH3gd5dZnvIlHL4s iEx0neAC YmHBBCZRV3swo2Dbgoky0SCqARrdztr/0MlNskiChHfXxYAS+jhh62KZ/HJz8eKxGONhec/0UURqaXMj3d/G+OPwNq8UKwHHcuZGe6qT3TL65R/vWEgEUjw0pbnxBvidHHhRj5J4z/3lJtRm4YL4T/1L8NuS7OZhZnuq97Iq2xMebEol1FRBKYyLv6RhSJYCKnrnSBGN+QmGcdHVrXJ0z3drdQtRM99nuDyPcSJrSlrIDfffqDX4aEPBi5oLQgRcF5ZT1CynbKJ8yUE7HhGugQJIqnFgmp8USw4d2aCn5VzLysc5dUlfBzXWxper9c1GDT3PdgdoND8wWo9b3/nCgFNGYZg== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000096, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Using for_each_vma_range to find vmas, and not only inside locking, but also outside locking to ensure that vma_start_write are performed. Reported-and-tested-by: syzbot+b591856e0f0139f83023@syzkaller.appspotmail.com Signed-off-by: Edward AD --- mm/pagewalk.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mm/pagewalk.c b/mm/pagewalk.c index b7d7e4fcfad7..b31d59a27f57 100644 --- a/mm/pagewalk.c +++ b/mm/pagewalk.c @@ -479,6 +479,7 @@ int walk_page_range(struct mm_struct *mm, unsigned long start, .mm = mm, .private = private, }; + struct vma_iterator vmi; if (start >= end) return -EINVAL; @@ -488,8 +489,9 @@ int walk_page_range(struct mm_struct *mm, unsigned long start, process_mm_walk_lock(walk.mm, ops->walk_lock); - vma = find_vma(walk.mm, start); - do { + vma_iter_init(&vmi, walk.mm, start); + for_each_vma_range(vmi, vma, end) { + process_vma_walk_lock(vma, ops->walk_lock); if (!vma) { /* after the last vma */ walk.vma = NULL; next = end; @@ -501,10 +503,8 @@ int walk_page_range(struct mm_struct *mm, unsigned long start, if (ops->pte_hole) err = ops->pte_hole(start, next, -1, &walk); } else { /* inside vma */ - process_vma_walk_lock(vma, ops->walk_lock); walk.vma = vma; next = min(end, vma->vm_end); - vma = find_vma(mm, vma->vm_end); err = walk_page_test(start, next, &walk); if (err > 0) { @@ -522,7 +522,7 @@ int walk_page_range(struct mm_struct *mm, unsigned long start, } if (err) break; - } while (start = next, start < end); + }; return err; }