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

Commit f98cea40 authored by Chris Chiu's avatar Chris Chiu Committed by Greg Kroah-Hartman
Browse files

rtl8xxxu: prevent potential memory leak



[ Upstream commit 86279456a4d47782398d3cb8193f78f672e36cac ]

Free the skb if usb_submit_urb fails on rx_urb. And free the urb
no matter usb_submit_urb succeeds or not in rtl8xxxu_submit_int_urb.

Signed-off-by: default avatarChris Chiu <chiu@endlessm.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20200906040424.22022-1-chiu@endlessm.com


Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent a92781c8
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -5453,7 +5453,6 @@ static int rtl8xxxu_submit_int_urb(struct ieee80211_hw *hw)
	ret = usb_submit_urb(urb, GFP_KERNEL);
	if (ret) {
		usb_unanchor_urb(urb);
		usb_free_urb(urb);
		goto error;
	}

@@ -5462,6 +5461,7 @@ static int rtl8xxxu_submit_int_urb(struct ieee80211_hw *hw)
	rtl8xxxu_write32(priv, REG_USB_HIMR, val32);

error:
	usb_free_urb(urb);
	return ret;
}

@@ -5787,6 +5787,7 @@ static int rtl8xxxu_start(struct ieee80211_hw *hw)
	struct rtl8xxxu_priv *priv = hw->priv;
	struct rtl8xxxu_rx_urb *rx_urb;
	struct rtl8xxxu_tx_urb *tx_urb;
	struct sk_buff *skb;
	unsigned long flags;
	int ret, i;

@@ -5837,6 +5838,13 @@ static int rtl8xxxu_start(struct ieee80211_hw *hw)
		rx_urb->hw = hw;

		ret = rtl8xxxu_submit_rx_urb(priv, rx_urb);
		if (ret) {
			if (ret != -ENOMEM) {
				skb = (struct sk_buff *)rx_urb->urb.context;
				dev_kfree_skb(skb);
			}
			rtl8xxxu_queue_rx_urb(priv, rx_urb);
		}
	}
exit:
	/*