Message ID | 20210107123541.39206-1-linmiaohe@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | mm/vmalloc.c: Fix potential memory leak | expand |
> 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@huawei.com> > Signed-off-by: Miaohe Lin <linmiaohe@huawei.com> > Cc: <stable@vger.kernel.org> > --- > 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@gmail.com> -- Vlad Rezki
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);