瀏覽代碼

[media] videobuf2-dma-sg: fix possible memory leak

Fix the return when 'buf->pages' allocation error.

Signed-off-by: Geyslan G. Bem <geyslan@gmail.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Geyslan G. Bem 11 年之前
父節點
當前提交
64c832a4f7
共有 1 個文件被更改,包括 2 次插入1 次删除
  1. 2 1
      drivers/media/v4l2-core/videobuf2-dma-sg.c

+ 2 - 1
drivers/media/v4l2-core/videobuf2-dma-sg.c

@@ -178,7 +178,7 @@ static void *vb2_dma_sg_get_userptr(void *alloc_ctx, unsigned long vaddr,
 	buf->pages = kzalloc(buf->num_pages * sizeof(struct page *),
 	buf->pages = kzalloc(buf->num_pages * sizeof(struct page *),
 			     GFP_KERNEL);
 			     GFP_KERNEL);
 	if (!buf->pages)
 	if (!buf->pages)
-		return NULL;
+		goto userptr_fail_alloc_pages;
 
 
 	num_pages_from_user = get_user_pages(current, current->mm,
 	num_pages_from_user = get_user_pages(current, current->mm,
 					     vaddr & PAGE_MASK,
 					     vaddr & PAGE_MASK,
@@ -204,6 +204,7 @@ userptr_fail_get_user_pages:
 	while (--num_pages_from_user >= 0)
 	while (--num_pages_from_user >= 0)
 		put_page(buf->pages[num_pages_from_user]);
 		put_page(buf->pages[num_pages_from_user]);
 	kfree(buf->pages);
 	kfree(buf->pages);
+userptr_fail_alloc_pages:
 	kfree(buf);
 	kfree(buf);
 	return NULL;
 	return NULL;
 }
 }