lkml.org 
[lkml]   [2020]   [Oct]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.8 598/633] rtl8xxxu: prevent potential memory leak
    Date
    From: Chris Chiu <chiu@endlessm.com>

    [ 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: Chris Chiu <chiu@endlessm.com>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    Link: https://lore.kernel.org/r/20200906040424.22022-1-chiu@endlessm.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 10 +++++++++-
    1 file changed, 9 insertions(+), 1 deletion(-)

    diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
    index 19efae462a242..5cd7ef3625c5e 100644
    --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
    +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
    @@ -5795,7 +5795,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;
    }

    @@ -5804,6 +5803,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;
    }

    @@ -6318,6 +6318,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;

    @@ -6368,6 +6369,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);
    + }
    }

    schedule_delayed_work(&priv->ra_watchdog, 2 * HZ);
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-10-27 17:11    [W:4.502 / U:0.128 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site