From nobody Mon Apr 6 09:44:06 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 2C352C38145 for ; Thu, 8 Sep 2022 07:31:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230348AbiIHHby (ORCPT ); Thu, 8 Sep 2022 03:31:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49998 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229983AbiIHHbu (ORCPT ); Thu, 8 Sep 2022 03:31:50 -0400 Received: from out203-205-221-202.mail.qq.com (out203-205-221-202.mail.qq.com [203.205.221.202]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 870AEA8CD2 for ; Thu, 8 Sep 2022 00:31:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1662622300; bh=bwQ65S53ALWy6bGST1Fb3/GMX9ST8lXV82dLJKNIlOQ=; h=From:To:Cc:Subject:Date; b=LcItgrUnRrkrHP8DL9CTZCo9wZORyw7h9qslPybwReFwfTJyB//6Y8nYxp1qY0roT N68xMHoDqy26uZbul/D/yAhEB2x969rWYdiDewtTApU0Yz1Tm320CZj6rKvIZFkptP /QyDMNSYK1zPKOPuWRAVPJ8obRoUZ2ZRGFm2+9GU= Received: from localhost.localdomain ([59.172.176.188]) by newxmesmtplogicsvrsza30.qq.com (NewEsmtp) with SMTP id 7E618A06; Thu, 08 Sep 2022 15:31:38 +0800 X-QQ-mid: xmsmtpt1662622298tyuvudud9 Message-ID: X-QQ-XMAILINFO: Mrv6PNPZjcp6xxCecALPcHbA4h6sD5OnU4pfgtJ5GcpkdxPxE/zW1HbCXHGX+0 LN9b6UbRqOgu7PtrFF2HtcnWoy8lHG/KsZOHCeenkYPO0jLpMr5yU1kkT+ChUpPvuzWwfuFCp0nc ISzHFvRq8t3lP75VuYTtMjqiOrjwxczIUUFiTqCh00tCM5UA3Wp0Exc2KaN1h1ybZQl6AR19k0fX FPPmIm+fwVb1VZ8pL3MrQ6lqP+dOre0gxoJRKFeHpnLeXJrRG3WOtxnKtYNRt9OGMMPZ7UDQ2xbK /vqX/H9S0cdXd32wsgFjnBwp3Basc+QrjerAyuSrohJTYXGrx8pVw0/roB2MNzp2NXqAnfpuwufg RAqKeajRSTQPHRQzNtCWXoaF7mn4N9WZrqYCMHW44wwPWw9PkGnsPHr3btIlw0HModR5ORXzisCK 5vYT+Kagndgdqq6QGuBlkwJJsvDm0aZNo0wwXhp5nvydcWl6cd8MgJb1YpXcEmzVSpNfnBpKkTsQ EXfGIJf6IvpMi2cMvpYRTuwm7CxHDoPhR7Ws0t2hJjcK4eOR668ChbX0jxd6btbksL+X+QTG6csd cL74h7oQ6YF1RIsunDQzBhMLYly+qfNsfi5rZRl7con9X7LgMopys/GL8jSfjhHVFwFKzYMV9n0S AO6mBi1BMGZWSbFKyoGOUfqRGidSq31PGN8gyELZiZInGI1FXWzo6SmKTwULKATCyLDqyQItxtXs dC4FVciebeZBMYOSAroaP9/ojspOX4jVBZmP3WGV6mQPVuZ/KtXkHuLWLO9TWND70y4p2di7M1tg zdc+RpZgQei/OwslZNkUhX7SWLYos1U2ssTwlUX3nRWPZzlfksUNpQSfiEF60id0H6LADQYHwbaz qOQxAo9zuZp/P11lLpGe0ypu3yjSmQAPT0zyEAE6ViR9yreIhD5wT6SIek//pszXQ9aTu7PGXCWe PGHFMaVJyMOouxbceyICiX8+KQ4QwrWo76CNdbHEThqzwwUtyg3IDqGeubBaFFEKCQeQL92Wc= From: xkernel.wang@foxmail.com To: gregkh@linuxfoundation.org Cc: linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Xiaoke Wang Subject: [PATCH v3] staging: rtl8723bs: fix potential memory leak in rtw_init_drv_sw() Date: Thu, 8 Sep 2022 15:31:25 +0800 X-OQ-MSGID: <20220908073125.2232-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 them and keeps the success and error separate. As there is no FooBar device to test with, no runtime testing was performed. Signed-off-by: Xiaoke Wang --- ChangeLog: v1->v2 update the description. v2->v3 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) --