[tip: x86/boot] x86/boot: Fix off-by-one error in sme_clear_pgd()

From: tip-bot2 for Thorsten Blum

Date: Thu Nov 05 2026 - 14:26:29 EST


The following commit has been merged into the x86/boot branch of tip:

Commit-ID: 8523d938dce836fbe7ea33fcc98d8460b094ef81
Gitweb: https://git.kernel.org/tip/8523d938dce836fbe7ea33fcc98d8460b094ef81
Author: Thorsten Blum <blum@xxxxxxxxxx>
AuthorDate: Fri, 18 Sep 2026 16:27:13 +02:00
Committer: Borislav Petkov (AMD) <bp@xxxxxxxxx>
CommitterDate: Thu, 05 Nov 2026 10:21:38 -08:00

x86/boot: Fix off-by-one error in sme_clear_pgd()

The mapping helpers __sme_map_range_pmd() and __sme_map_range_pte(), and
therefore sme_encrypt_kernel(), use exclusive end addresses and stop
before vaddr reaches vaddr_end.

However, sme_clear_pgd() treats vaddr_end as inclusive when calculating
the last PGD entry to clear. If vaddr_end is PGD-aligned, the first PGD
entry outside the range is cleared too.

Use vaddr_end - 1 to calculate the last PGD entry within the range.

Fixes: 6ebcb060713f ("x86/mm: Add support to encrypt the kernel in-place")
Signed-off-by: Thorsten Blum <blum@xxxxxxxxxx>
Signed-off-by: Borislav Petkov (AMD) <bp@xxxxxxxxx>
Reviewed-by: Tom Lendacky <thomas.lendacky@xxxxxxx>
Link: https://patch.msgid.link/20260918142714.242711-2-blum@xxxxxxxxxx
---
arch/x86/boot/startup/sme.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/boot/startup/sme.c b/arch/x86/boot/startup/sme.c
index c07a2c3..2d5cb3f 100644
--- a/arch/x86/boot/startup/sme.c
+++ b/arch/x86/boot/startup/sme.c
@@ -99,7 +99,7 @@ static void __init sme_clear_pgd(struct sme_populate_pgd_data *ppd)
pgd_t *pgd_p;

pgd_start = ppd->vaddr & PGDIR_MASK;
- pgd_end = ppd->vaddr_end & PGDIR_MASK;
+ pgd_end = (ppd->vaddr_end - 1) & PGDIR_MASK;

pgd_size = (((pgd_end - pgd_start) / PGDIR_SIZE) + 1) * sizeof(pgd_t);