From nobody Mon Jun 8 12:13:50 2026 Received: from outbound.baidu.com (mx16.baidu.com [111.202.115.101]) by smtp.subspace.kernel.org (Postfix) with SMTP id 5D80F15746F for ; Fri, 29 May 2026 10:58:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=111.202.115.101 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780052288; cv=none; b=KE3g72WUCGUH3gvU7Gcvc1e9xVNbJSwdQQfBTAELJJZXe8gkXSGI9dxzcf75pLR7AbeZBstBlcVwSREXPEPxVtSfdDeDGe/N7WmJ93mT72UcJrJMaVNiDCmBwr9Eh2EORIZku01BkNhi6+NRNLOFk78m7b+h4WLRs0VyyThseu8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780052288; c=relaxed/simple; bh=FeILj743umkDOuqYtEKOX7TAETUTD8AS3R3Zm+oPkDk=; h=From:To:CC:Subject:Date:Message-ID:MIME-Version:Content-Type; b=JBm6TDUMGaL5vwUmpQQ+JzbZLnzGh9DgP+ANb2/1TqYJ4UkTb4NzCSBjguUjXkfMd9LIDMWmv+qCIGFatx6gfKVBU276609gRRpI0dsSv1cFxt5ZQUerr741xac6TQRI9x0Jw2uvQ2rqaHMROIHAUIRzCMX1kOzU1ZeyftGmk+c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=baidu.com; spf=pass smtp.mailfrom=baidu.com; dkim=pass (2048-bit key) header.d=baidu.com header.i=@baidu.com header.b=V4Cke76N; arc=none smtp.client-ip=111.202.115.101 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=baidu.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baidu.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baidu.com header.i=@baidu.com header.b="V4Cke76N" X-MD-Sfrom: lirongqing@baidu.com X-MD-SrcIP: 172.31.50.47 From: lirongqing To: Dave Hansen , Andy Lutomirski , Peter Zijlstra , Thomas Gleixner , Ingo Molnar , Borislav Petkov , , "H . Peter Anvin" , CC: Li RongQing Subject: [PATCH] x86/mm: Fix potential RMP page count mismatch in early SNP transitions Date: Fri, 29 May 2026 06:57:49 -0400 Message-ID: <20260529105749.1797-1-lirongqing@baidu.com> X-Mailer: git-send-email 2.17.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: bjkjy-exc2.internal.baidu.com (172.31.50.46) To bjkjy-exc3.internal.baidu.com (172.31.50.47) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baidu.com; s=selector1; t=1780052281; bh=xcDAIo35udWcz4xx8sgk64Z0nTvmWh3Om/IGJDBQ8OU=; h=From:To:CC:Subject:Date:Message-ID:Content-Type; b=V4Cke76NgLo2bboiAsuhgVK4YDT8moaNUlLGwIjdNjW+osz8MbWLNYlK9PeO30Eky CheSZ9TkzmNoIbLst58w2Z5rb6jmdulOGDtOG+MO1XtNbvq1BuasBIZC1Txc+yR+uC nd61PuQ2QZ8usI/krO1wQ348rKshdkZSowENq121wBFt1CaKhGYI3GGmTXI+Mt3RGU +PFPSf5IIhkPyLkV/tDN/I9TebmBA6jF7SwhsNLtMkGZvnKZtqEOg0EmOex0BPlAHt EU9AnV6HkkdHMDRJZkxyYxvnro+HGi/MLgcixPvPGDKikVrb0EY7sS17DQIifmXVbp il2FL6a/WoKTA== Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Li RongQing __set_clr_pte_enc() hardcodes the RMP update page count to 1. This assumes early boot page tables only use 4K mappings. To eliminate this fragile assumption and prevent potential RMP violations with hugepages, calculate the page count dynamically via d.size >> PAGE_SHIFT. Since d.size is derived from the page table level (4K/2M/1G), it is guaranteed to be page-aligned, making PAGE_ALIGN() unnecessary. Signed-off-by: Li RongQing --- arch/x86/mm/mem_encrypt_amd.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/arch/x86/mm/mem_encrypt_amd.c b/arch/x86/mm/mem_encrypt_amd.c index 2f8c321..229a23b 100644 --- a/arch/x86/mm/mem_encrypt_amd.c +++ b/arch/x86/mm/mem_encrypt_amd.c @@ -376,7 +376,8 @@ static void __init __set_clr_pte_enc(pte_t *kpte, int l= evel, bool enc) * ON SNP, the page state in the RMP table must happen * before the page table updates. */ - early_snp_set_memory_shared((unsigned long)__va(d.pa), d.pa, 1); + early_snp_set_memory_shared((unsigned long)__va(d.pa), d.pa, + d.size >> PAGE_SHIFT); } =20 set_pte_enc_mask(kpte, d.pfn, d.new_pgprot); @@ -386,7 +387,8 @@ static void __init __set_clr_pte_enc(pte_t *kpte, int l= evel, bool enc) * add this page as private. */ if (enc) - early_snp_set_memory_private((unsigned long)__va(d.pa), d.pa, 1); + early_snp_set_memory_private((unsigned long)__va(d.pa), d.pa, + d.size >> PAGE_SHIFT); } =20 static int __init early_set_memory_enc_dec(unsigned long vaddr, --=20 2.9.4