> In VM_MAP_PUT_PAGES case, we should put pages and free array in vfree. But > we missed to set area->nr_pages in vmap(). So we would failed to put pages > in __vunmap() because area->nr_pages = 0. > > Fixes: b944afc9d64d ("mm: add a VM_MAP_PUT_PAGES flag for vmap") > Signed-off-by: Shijie Luo <luoshijie1@xxxxxxxxxx> > Signed-off-by: Miaohe Lin <linmiaohe@xxxxxxxxxx> > Cc: <stable@xxxxxxxxxxxxxxx> > --- > mm/vmalloc.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/mm/vmalloc.c b/mm/vmalloc.c > index 6507a579ff88..8ab83fbecadd 100644 > --- a/mm/vmalloc.c > +++ b/mm/vmalloc.c > @@ -2421,8 +2421,10 @@ void *vmap(struct page **pages, unsigned int count, > return NULL; > } > > - if (flags & VM_MAP_PUT_PAGES) > + if (flags & VM_MAP_PUT_PAGES) { > area->pages = pages; > + area->nr_pages = count; > + } > return area->addr; > } > EXPORT_SYMBOL(vmap); > -- > 2.19.1 > Reviewed-by: Uladzislau Rezki (Sony) <urezki@xxxxxxxxx> -- Vlad Rezki