From nobody Mon Dec 15 21:43:17 2025 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 412341DF98F; Wed, 5 Feb 2025 15:11:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738768265; cv=none; b=bWTER2lDicq0pgpiJw6ACPP/GwbT+An95Wphl0QfKCpoLAAHDL76pV1YdtQcoHK2vrXR/yEtwfZyLOSATGx53XXbiAG8s624G0/YeVeJEhzv06XFr0uZwwVDUC7AuebYg+SKHXw0RRx5ouEXCpzWUG2ka5n/2tcEMbnCUT8i0LE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738768265; c=relaxed/simple; bh=ma+w0E6ocwSGzO+YhsXjcwBW6CsGmyczv/5KrNgRbAY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=K4jyLGFXFf7+LoNXUbG/Wpcn8I091eDusCBEHIETnzzQ4wvVD+iuxZXz8Xli9XqCmbx78IY8mboRlMGWNjGlS/axDxuTjE+3gu48xller0M1Od0b/seFyLaFp67tGzcAXyhTDIYUjnMzbC5QuNG8vbBTwQi2lB7DaSttUuKwfVA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 7589B1063; Wed, 5 Feb 2025 07:11:27 -0800 (PST) Received: from e125769.cambridge.arm.com (e125769.cambridge.arm.com [10.1.196.27]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 3AC763F5A1; Wed, 5 Feb 2025 07:11:01 -0800 (PST) From: Ryan Roberts To: Catalin Marinas , Will Deacon , Muchun Song , Pasha Tatashin , Andrew Morton , Uladzislau Rezki , Christoph Hellwig , Mark Rutland , Ard Biesheuvel , Anshuman Khandual , Dev Jain , Alexandre Ghiti , Steve Capper , Kevin Brodsky Cc: Ryan Roberts , linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org Subject: [PATCH v1 13/16] mm: Don't skip arch_sync_kernel_mappings() in error paths Date: Wed, 5 Feb 2025 15:09:53 +0000 Message-ID: <20250205151003.88959-14-ryan.roberts@arm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250205151003.88959-1-ryan.roberts@arm.com> References: <20250205151003.88959-1-ryan.roberts@arm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Fix callers that previously skipped calling arch_sync_kernel_mappings() if an error occurred during a pgtable update. The call is still required to sync any pgtable updates that may have occurred prior to hitting the error condition. These are theoretical bugs discovered during code review. Cc: Fixes: 2ba3e6947aed ("mm/vmalloc: track which page-table levels were modifi= ed") Fixes: 0c95cba49255 ("mm: apply_to_pte_range warn and fail if a large pte i= s encountered") Signed-off-by: Ryan Roberts Reviewed-by: Anshuman Khandual --- mm/memory.c | 6 ++++-- mm/vmalloc.c | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/mm/memory.c b/mm/memory.c index 539c0f7c6d54..a15f7dd500ea 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -3040,8 +3040,10 @@ static int __apply_to_page_range(struct mm_struct *m= m, unsigned long addr, next =3D pgd_addr_end(addr, end); if (pgd_none(*pgd) && !create) continue; - if (WARN_ON_ONCE(pgd_leaf(*pgd))) - return -EINVAL; + if (WARN_ON_ONCE(pgd_leaf(*pgd))) { + err =3D -EINVAL; + break; + } if (!pgd_none(*pgd) && WARN_ON_ONCE(pgd_bad(*pgd))) { if (!create) continue; diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 6111ce900ec4..68950b1824d0 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -604,13 +604,13 @@ static int vmap_small_pages_range_noflush(unsigned lo= ng addr, unsigned long end, mask |=3D PGTBL_PGD_MODIFIED; err =3D vmap_pages_p4d_range(pgd, addr, next, prot, pages, &nr, &mask); if (err) - return err; + break; } while (pgd++, addr =3D next, addr !=3D end); =20 if (mask & ARCH_PAGE_TABLE_SYNC_MASK) arch_sync_kernel_mappings(start, end); =20 - return 0; + return err; } =20 /* --=20 2.43.0