Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 89473129 authored by Alexey Khoroshilov's avatar Alexey Khoroshilov Committed by David S. Miller
Browse files

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: default avatarAlexey Khoroshilov <khoroshilov@ispras.ru>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 38463e2c
Loading
Loading
Loading
Loading
+23 −17
Original line number Diff line number Diff line
@@ -501,8 +501,11 @@ static inline int mcs_setup_urbs(struct mcs_cb *mcs)
		return 0;

	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 1;
}
@@ -738,11 +741,14 @@ static int mcs_net_open(struct net_device *netdev)

	ret = mcs_receive_start(mcs);
	if (ret)
		goto error3;
		goto error4;

	netif_start_queue(netdev);
	return 0;

error4:
	usb_free_urb(mcs->rx_urb);
	usb_free_urb(mcs->tx_urb);
error3:
	irlap_close(mcs->irlap);
error2: