net/irda/mcs7780: fix memory leaks in mcs_net_open()
If rx_urb allocation fails in mcs_setup_urbs(), tx_urb leaks. If mcs_receive_start() fails in mcs_net_open(), the both urbs are not deallocated. The patch fixes the issues and by the way fixes label indentation. Found by Linux Driver Verification project (linuxtesting.org). Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
38463e2c29
commit
8947312987
@@ -501,8 +501,11 @@ static inline int mcs_setup_urbs(struct mcs_cb *mcs)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
mcs->rx_urb = usb_alloc_urb(0, GFP_KERNEL);
|
mcs->rx_urb = usb_alloc_urb(0, GFP_KERNEL);
|
||||||
if (!mcs->rx_urb)
|
if (!mcs->rx_urb) {
|
||||||
|
usb_free_urb(mcs->tx_urb);
|
||||||
|
mcs->tx_urb = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -738,11 +741,14 @@ static int mcs_net_open(struct net_device *netdev)
|
|||||||
|
|
||||||
ret = mcs_receive_start(mcs);
|
ret = mcs_receive_start(mcs);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto error3;
|
goto error4;
|
||||||
|
|
||||||
netif_start_queue(netdev);
|
netif_start_queue(netdev);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
error4:
|
||||||
|
usb_free_urb(mcs->rx_urb);
|
||||||
|
usb_free_urb(mcs->tx_urb);
|
||||||
error3:
|
error3:
|
||||||
irlap_close(mcs->irlap);
|
irlap_close(mcs->irlap);
|
||||||
error2:
|
error2:
|
||||||
|
Reference in New Issue
Block a user