From nobody Fri Jun 19 08:35:26 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 22390C433EF for ; Wed, 6 Apr 2022 09:36:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1358055AbiDFJcx (ORCPT ); Wed, 6 Apr 2022 05:32:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54136 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1582058AbiDFJVn (ORCPT ); Wed, 6 Apr 2022 05:21:43 -0400 Received: from out203-205-221-191.mail.qq.com (out203-205-221-191.mail.qq.com [203.205.221.191]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 71EFE1717B4 for ; Tue, 5 Apr 2022 20:50:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1649217050; bh=NKBQjU5IhN7Smi6bhWovIayNOgoinAmwlLxAmwsJtL4=; h=From:To:Cc:Subject:Date; b=JwWrKzjxxAel84uiu5CHpI6cfZzbwbhhRZ7gMaEbdCw34yOr3W9hKL2gTeYfrEX0U k+BJBGPaauwcoBxJktYekWXQPlD6+X3fms+1Hfz+/N2OWoc75LC3t7DpbrIV8sqVyi yENDm9LbfsdYvjnrLfNJRpiHoUga52EaMXbqTS80= Received: from localhost.localdomain ([43.227.136.188]) by newxmesmtplogicsvrsza5.qq.com (NewEsmtp) with SMTP id CAF15C39; Wed, 06 Apr 2022 11:50:47 +0800 X-QQ-mid: xmsmtpt1649217047t2ia44wgy Message-ID: X-QQ-XMAILINFO: OaoBA5NOFC/jwAQ1vk4YzPONfF7qyLOhF15ze7ebY/CHnYf3KXrIF+PJDkOgyw 6fJ63tPd8vv8i0i7IvA+m380u3vlfSQQcBzpLNlmY+RWbpb6+nlEATw5DsgD39jpg2mUJfe6SNnA pCsYkBCvN7qmUfHpirVNMYEBYr8tl8U7W+XTtJIFr9ebcZh6RmU4bPBxYJ7KXfna7wVpcjeN4gX8 IXMD7BEbYOjVsIZUMae9x7REpvDi8wEQis/bsCu54gbx3XOYQQ/cFr08Y4iQ21k+HhmEqvtkiomH 7U0VhYSj9Cho6a+MwpQaMoRPp/PmgdD/Ren77He3JhIpaEpfl4g/NsJXuNjEJ3rW0COgakzdzhe7 DRqodi31nv6PtxOk8aPwv1ge68JaG8EO4UoP6Bv2PGpZ+ubJlOfwN4GW+MI60168vEXF5lr6FRfm 8z6bRC9lyit+6ellocGyO1naSMGfaLv4Wi1iI0PMr4zbw6q3aIXPPd9oKXA2V/CVf2fa4apfd8gd G15NkK6ELJJ6/qK2rsMq81ktprl3A/eNrm7QkbDb2bbaNPR6YoA52F4EtYl99gYoF5aUrVhprnKs GUN2ELB5KjL65hFAJ6BOBut4uFGWCibQYcK9BOEhlBCXFGEzmFk5nzuC/7LIqEEY9pEDL0sCcuj1 s4GRV6v4EpazL+yCN3jjDXL1H5HnWAJ8apA82mbfjh6U+iGBkOiWlQhV3iV6DWamUfmgYAepM2Eo TVREaOc4JpPPPqs8FAtkmgZV0xsap0ITiucDWss+lP/87HYQPVtiWl+xUJSLjdp6SkXP6BaMW7K+ AoLswbAT3JGqLSilD3nONWv2TCiXjG+OBtMjcFyVxDLWh4PC7/BmS4eWRlahay9uVLvj48DHhs41 EAFB1ykwEFmBaKLxQx/SqogyZ72MUWwKhva2Tuk1BPHR70H4f93q1EcCJLJ20/qdqvsEdV6qGeWd S6Q//0g0NDBUpFscBADXDzrRIJW3Nv From: xkernel.wang@foxmail.com To: gregkh@linuxfoundation.org Cc: linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Xiaoke Wang Subject: [PATCH v2] staging: rtl8723bs: fix potential memory leak in rtw_init_drv_sw() Date: Wed, 6 Apr 2022 11:50:33 +0800 X-OQ-MSGID: <20220406035033.12771-1-xkernel.wang@foxmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Xiaoke Wang In rtw_init_drv_sw(), there are various init functions are called to=20 populate the padapter structure and some checks for their return value. However, except for the first one error path, the other five error paths=20 do not properly release the previous allocated resources, which leads to=20 various memory leaks. This patch fixes this and keeps the success and error separate. Signed-off-by: Xiaoke Wang --- ChangeLog: v1->v2 update the description. drivers/staging/rtl8723bs/os_dep/os_intfs.c | 60 +++++++++++---------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/drivers/staging/rtl8723bs/os_dep/os_intfs.c b/drivers/staging/= rtl8723bs/os_dep/os_intfs.c index 0a8c24e..1bf6fc0 100644 --- a/drivers/staging/rtl8723bs/os_dep/os_intfs.c +++ b/drivers/staging/rtl8723bs/os_dep/os_intfs.c @@ -664,51 +664,36 @@ void rtw_reset_drv_sw(struct adapter *padapter) =20 u8 rtw_init_drv_sw(struct adapter *padapter) { - u8 ret8 =3D _SUCCESS; - rtw_init_default_value(padapter); =20 rtw_init_hal_com_default_value(padapter); =20 - if (rtw_init_cmd_priv(&padapter->cmdpriv)) { - ret8 =3D _FAIL; - goto exit; - } + if (rtw_init_cmd_priv(&padapter->cmdpriv)) + return _FAIL; =20 padapter->cmdpriv.padapter =3D padapter; =20 - if (rtw_init_evt_priv(&padapter->evtpriv)) { - ret8 =3D _FAIL; - goto exit; - } + if (rtw_init_evt_priv(&padapter->evtpriv)) + goto free_cmd_priv; =20 - - if (rtw_init_mlme_priv(padapter) =3D=3D _FAIL) { - ret8 =3D _FAIL; - goto exit; - } + if (rtw_init_mlme_priv(padapter) =3D=3D _FAIL) + goto free_evt_priv; =20 init_mlme_ext_priv(padapter); =20 - if (_rtw_init_xmit_priv(&padapter->xmitpriv, padapter) =3D=3D _FAIL) { - ret8 =3D _FAIL; - goto exit; - } + if (_rtw_init_xmit_priv(&padapter->xmitpriv, padapter) =3D=3D _FAIL) + goto free_mlme_ext; =20 - if (_rtw_init_recv_priv(&padapter->recvpriv, padapter) =3D=3D _FAIL) { - ret8 =3D _FAIL; - goto exit; - } + if (_rtw_init_recv_priv(&padapter->recvpriv, padapter) =3D=3D _FAIL) + goto free_xmit_priv; /* add for CONFIG_IEEE80211W, none 11w also can use */ spin_lock_init(&padapter->security_key_mutex); =20 /* We don't need to memset padapter->XXX to zero, because adapter is all= ocated by vzalloc(). */ /* memset((unsigned char *)&padapter->securitypriv, 0, sizeof (struct sec= urity_priv)); */ =20 - if (_rtw_init_sta_priv(&padapter->stapriv) =3D=3D _FAIL) { - ret8 =3D _FAIL; - goto exit; - } + if (_rtw_init_sta_priv(&padapter->stapriv) =3D=3D _FAIL) + goto free_recv_priv; =20 padapter->stapriv.padapter =3D padapter; padapter->setband =3D GHZ24_50; @@ -719,9 +704,26 @@ u8 rtw_init_drv_sw(struct adapter *padapter) =20 rtw_hal_dm_init(padapter); =20 -exit: + return _SUCCESS; + +free_recv_priv: + _rtw_free_recv_priv(&padapter->recvpriv); + +free_xmit_priv: + _rtw_free_xmit_priv(&padapter->xmitpriv); + +free_mlme_ext: + free_mlme_ext_priv(&padapter->mlmeextpriv); =20 - return ret8; + rtw_free_mlme_priv(&padapter->mlmepriv); + +free_evt_priv: + rtw_free_evt_priv(&padapter->evtpriv); + +free_cmd_priv: + rtw_free_cmd_priv(&padapter->cmdpriv); + + return _FAIL; } =20 void rtw_cancel_all_timer(struct adapter *padapter) --