Messages in this thread | | | Date | Sat, 21 May 2011 13:33:17 +0800 | Subject | Re: [PATCH] vdso: Fix memory leak of init_vdso_vars(). | From | wzt wzt <> |
| |
hi, andi, any comments?
On Wed, May 18, 2011 at 3:05 PM, wzt wzt <wzt.wzt@gmail.com> wrote: > Fix memory leak of init_vdso_vars(). > > Signed-off-by: Zhitong Wang <zhitong.wangzt@alibaba-inc.com> > Reviewed-by: Coly Li <bosong.ly@taobao.com> > > --- > arch/x86/vdso/vma.c | 14 ++++++++++---- > 1 files changed, 10 insertions(+), 4 deletions(-) > > diff --git a/arch/x86/vdso/vma.c b/arch/x86/vdso/vma.c > index 4b5d26f..8d9d652 100644 > --- a/arch/x86/vdso/vma.c > +++ b/arch/x86/vdso/vma.c > @@ -44,19 +44,19 @@ static int __init init_vdso_vars(void) > vdso_size = npages << PAGE_SHIFT; > vdso_pages = kmalloc(sizeof(struct page *) * npages, GFP_KERNEL); > if (!vdso_pages) > - goto oom; > + goto oom1; > for (i = 0; i < npages; i++) { > struct page *p; > p = alloc_page(GFP_KERNEL); > if (!p) > - goto oom; > + goto oom2; > vdso_pages[i] = p; > copy_page(page_address(p), vdso_start + i*PAGE_SIZE); > } > > vbase = vmap(vdso_pages, npages, 0, PAGE_KERNEL); > if (!vbase) > - goto oom; > + goto oom2; > > if (memcmp(vbase, "\177ELF", 4)) { > printk("VDSO: I'm broken; not ELF\n"); > @@ -70,7 +70,13 @@ static int __init init_vdso_vars(void) > vunmap(vbase); > return 0; > > - oom: > +oom2: > + i--; > + for (; i >= 0; i--) > + __free_page(vdso_pages[i]); > +oom1: > + __free_page(vdso_pages); > + > printk("Cannot allocate vdso\n"); > vdso_enabled = 0; > return -ENOMEM; > -- > 1.7.1 >
| |