[PATCH v4 4/9] mm/vmalloc: BUG_ON() on an unaligned range in vmap_pages_range_noflush_walk()
From: Hao Ge
Date: Tue Nov 10 2026 - 06:32:33 EST
The pte loop of vmap_pages_pte_range() maps whole pages and stops
only when addr lands exactly on end. An unaligned end lets addr
jump over it and the loop keeps mapping into whatever follows the
range. An unaligned start maps the page below the range with its
first pte. That corruption is impossible to debug afterwards, so
bug out on addr and end at the entry of
vmap_pages_range_noflush_walk().
Reported-by: Sashiko <sashiko-bot@xxxxxxxxxx>
Signed-off-by: Hao Ge <hao.ge@xxxxxxxxx>
---
mm/vmalloc.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/mm/vmalloc.c b/mm/vmalloc.c
index 27f2674a5556..86fbb1d2b27a 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -698,6 +698,8 @@ static int vmap_pages_range_noflush_walk(unsigned long addr, unsigned long end,
pgtbl_mod_mask mask = 0;
BUG_ON(addr >= end);
+ BUG_ON(!PAGE_ALIGNED(addr) || !PAGE_ALIGNED(end));
+
pgd = pgd_offset_k(addr);
do {
next = pgd_addr_end(addr, end);
--
2.25.1