On Tue, Nov 10, 2026 at 07:25:41PM +0800, Hao Ge wrote: > 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 <[email protected]> > Signed-off-by: Hao Ge <[email protected]> > --- > 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)); > + > But why do we add this? We used to live without it and as far i see we have not gotten any report about any unaligned addresses un-maping.
The vmap allocator grantees that va->va_start/end have to be page aligned. -- Uladzislau Rezki
