V4L/DVB (13413): introduce missing kfree
Error handling code following a kzalloc should free the allocated data. Similarly for usb-alloc urb. The semantic match that finds the first problem is as follows: (http://www.emn.fr/x-info/coccinelle/) // <smpl> @r exists@ local idexpression x; statement S; expression E; identifier f,f1,l; position p1,p2; expression *ptr != NULL; @@ x@p1 = \(kmalloc\|kzalloc\|kcalloc\)(...); ... if (x == NULL) S <... when != x when != if (...) { <+...x...+> } ( x->f1 = E | (x->f1 == NULL || ...) | f(...,x->f1,...) ) ...> ( return \(0\|<+...x...+>\|ptr\); | return@p2 ...; ) @script:python@ p1 << r.p1; p2 << r.p2; @@ print "* file: %s kmalloc %s return %s" % (p1[0].file,p1[0].line,p2[0].line) // </smpl> Signed-off-by: Julia Lawall <julia@diku.dk> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
c95a419a56
commit
cd0e280f1b
1 changed files with 6 additions and 2 deletions
|
@ -139,7 +139,7 @@ int hdpvr_alloc_buffers(struct hdpvr_device *dev, uint count)
|
|||
urb = usb_alloc_urb(0, GFP_KERNEL);
|
||||
if (!urb) {
|
||||
v4l2_err(&dev->v4l2_dev, "cannot allocate urb\n");
|
||||
goto exit;
|
||||
goto exit_urb;
|
||||
}
|
||||
buf->urb = urb;
|
||||
|
||||
|
@ -148,7 +148,7 @@ int hdpvr_alloc_buffers(struct hdpvr_device *dev, uint count)
|
|||
if (!mem) {
|
||||
v4l2_err(&dev->v4l2_dev,
|
||||
"cannot allocate usb transfer buffer\n");
|
||||
goto exit;
|
||||
goto exit_urb_buffer;
|
||||
}
|
||||
|
||||
usb_fill_bulk_urb(buf->urb, dev->udev,
|
||||
|
@ -161,6 +161,10 @@ int hdpvr_alloc_buffers(struct hdpvr_device *dev, uint count)
|
|||
list_add_tail(&buf->buff_list, &dev->free_buff_list);
|
||||
}
|
||||
return 0;
|
||||
exit_urb_buffer:
|
||||
usb_free_urb(urb);
|
||||
exit_urb:
|
||||
kfree(buf);
|
||||
exit:
|
||||
hdpvr_free_buffers(dev);
|
||||
return retval;
|
||||
|
|
Loading…
Reference in a new issue