diff options
author | Dan Carpenter <error27@gmail.com> | 2010-03-07 03:35:42 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-03-08 00:25:51 +0100 |
commit | 0e2b807234c42fab59f98ec913db30dfda0e63a7 (patch) | |
tree | cbfc388f8028fac2da91bc61b97b8dff82d34732 /drivers/net/irda | |
parent | sock.c: potential null dereference (diff) | |
download | linux-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.c | 4 |
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; |