summaryrefslogtreecommitdiffstats
path: root/drivers/net/irda
diff options
context:
space:
mode:
authorDan Carpenter <error27@gmail.com>2010-03-07 03:35:42 +0100
committerDavid S. Miller <davem@davemloft.net>2010-03-08 00:25:51 +0100
commit0e2b807234c42fab59f98ec913db30dfda0e63a7 (patch)
treecbfc388f8028fac2da91bc61b97b8dff82d34732 /drivers/net/irda
parentsock.c: potential null dereference (diff)
downloadlinux-0e2b807234c42fab59f98ec913db30dfda0e63a7.tar.xz
linux-0e2b807234c42fab59f98ec913db30dfda0e63a7.zip
irda-usb: add error handling and fix leak
If the call to kcalloc() fails then we should return -ENOMEM. Signed-off-by: Dan Carpenter <error27@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/irda')
-rw-r--r--drivers/net/irda/irda-usb.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/net/irda/irda-usb.c b/drivers/net/irda/irda-usb.c
index e8e33bb9d876..2c9b3af16612 100644
--- a/drivers/net/irda/irda-usb.c
+++ b/drivers/net/irda/irda-usb.c
@@ -1651,6 +1651,8 @@ static int irda_usb_probe(struct usb_interface *intf,
self->rx_urb = kcalloc(self->max_rx_urb, sizeof(struct urb *),
GFP_KERNEL);
+ if (!self->rx_urb)
+ goto err_free_net;
for (i = 0; i < self->max_rx_urb; i++) {
self->rx_urb[i] = usb_alloc_urb(0, GFP_KERNEL);
@@ -1783,6 +1785,8 @@ err_out_2:
err_out_1:
for (i = 0; i < self->max_rx_urb; i++)
usb_free_urb(self->rx_urb[i]);
+ kfree(self->rx_urb);
+err_free_net:
free_netdev(net);
err_out:
return ret;