提交 0b29669c 编写于 作者: B Brandon Philips 提交者: Mauro Carvalho Chehab

V4L/DVB (6751): V4L: Memory leak! Fix count in videobuf-vmalloc mmap

This is pretty serious bug.  map->count is never initialized after the
call to kmalloc making the count start at some random trash value.  The
end result is leaking videobufs.

Also, fix up the debug statements to print unsigned values.

Pushed to http://ifup.org/hg/v4l-dvb too
Signed-off-by: NBrandon Philips <bphilips@suse.de>
Signed-off-by: NMauro Carvalho Chehab <mchehab@infradead.org>
上级 843b1378
...@@ -51,7 +51,7 @@ videobuf_vm_open(struct vm_area_struct *vma) ...@@ -51,7 +51,7 @@ videobuf_vm_open(struct vm_area_struct *vma)
{ {
struct videobuf_mapping *map = vma->vm_private_data; struct videobuf_mapping *map = vma->vm_private_data;
dprintk(2,"vm_open %p [count=%d,vma=%08lx-%08lx]\n",map, dprintk(2,"vm_open %p [count=%u,vma=%08lx-%08lx]\n",map,
map->count,vma->vm_start,vma->vm_end); map->count,vma->vm_start,vma->vm_end);
map->count++; map->count++;
...@@ -64,7 +64,7 @@ videobuf_vm_close(struct vm_area_struct *vma) ...@@ -64,7 +64,7 @@ videobuf_vm_close(struct vm_area_struct *vma)
struct videobuf_queue *q = map->q; struct videobuf_queue *q = map->q;
int i; int i;
dprintk(2,"vm_close %p [count=%d,vma=%08lx-%08lx]\n",map, dprintk(2,"vm_close %p [count=%u,vma=%08lx-%08lx]\n",map,
map->count,vma->vm_start,vma->vm_end); map->count,vma->vm_start,vma->vm_end);
map->count--; map->count--;
...@@ -221,7 +221,7 @@ static int __videobuf_mmap_mapper(struct videobuf_queue *q, ...@@ -221,7 +221,7 @@ static int __videobuf_mmap_mapper(struct videobuf_queue *q,
} }
/* create mapping + update buffer list */ /* create mapping + update buffer list */
map = q->bufs[first]->map = kmalloc(sizeof(struct videobuf_mapping),GFP_KERNEL); map = q->bufs[first]->map = kzalloc(sizeof(struct videobuf_mapping),GFP_KERNEL);
if (NULL == map) if (NULL == map)
return -ENOMEM; return -ENOMEM;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册