linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/2] staging: r8188eu: improve error handling
@ 2022-03-09 20:50 Vihas Makwana
  2022-03-09 20:50 ` [PATCH v2 1/2] staging: r8188eu: call _cancel_timer_ex from _rtw_free_recv_priv Vihas Makwana
  2022-03-09 20:50 ` [PATCH v2 2/2] staging: r8188eu: proper error handling in rtw_init_drv_sw Vihas Makwana
  0 siblings, 2 replies; 5+ messages in thread
From: Vihas Makwana @ 2022-03-09 20:50 UTC (permalink / raw)
  To: Larry Finger, Phillip Potter, Greg Kroah-Hartman,
	Michael Straube, Martin Kaiser, Dan Carpenter, Pavel Skripkin
  Cc: linux-staging, linux-kernel, Vihas Makwana

This patchset improves error handling in rtw_init_drv_sw() and
fixes some memory leaks.

v1->v2:
Added fixes tag in patch 2/2.
Used dev_err instead of pr_err as it prefixes the error with
device info.

Vihas Makwana (2):
  staging: r8188eu: call rtl8188eu_free_recv_priv from
    _rtw_free_recv_priv
  staging: r8188eu: proper error handling in rtw_init_drv_sw

 drivers/staging/r8188eu/core/rtw_recv.c   |  1 +
 drivers/staging/r8188eu/os_dep/os_intfs.c | 60 ++++++++++++++++++-----
 2 files changed, 48 insertions(+), 13 deletions(-)

-- 
2.30.2


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v2 1/2] staging: r8188eu: call _cancel_timer_ex from _rtw_free_recv_priv
  2022-03-09 20:50 [PATCH v2 0/2] staging: r8188eu: improve error handling Vihas Makwana
@ 2022-03-09 20:50 ` Vihas Makwana
  2022-03-09 20:50 ` [PATCH v2 2/2] staging: r8188eu: proper error handling in rtw_init_drv_sw Vihas Makwana
  1 sibling, 0 replies; 5+ messages in thread
From: Vihas Makwana @ 2022-03-09 20:50 UTC (permalink / raw)
  To: Larry Finger, Phillip Potter, Greg Kroah-Hartman,
	Michael Straube, Martin Kaiser, Dan Carpenter, Pavel Skripkin
  Cc: linux-staging, linux-kernel, Vihas Makwana

The _rtw_init_recv_priv() initializes precvpriv->signal_stat_timer and
sets it's timeout interval to 1000 ms. But _rtw_free_recv_priv()
doesn't cancel the timer and we need to explicitly call
_cancel_timer_ex() after we call _rtw_free_recv_priv() to cancel the
timer.
Call _cancel_timer_ex() from inside _rtw_free_recv_priv() as every init
function needs a matching free function.

Signed-off-by: Vihas Makwana <makvihas@gmail.com>
---
 drivers/staging/r8188eu/core/rtw_recv.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/staging/r8188eu/core/rtw_recv.c b/drivers/staging/r8188eu/core/rtw_recv.c
index d77d98351..61308eb39 100644
--- a/drivers/staging/r8188eu/core/rtw_recv.c
+++ b/drivers/staging/r8188eu/core/rtw_recv.c
@@ -103,6 +103,7 @@ void _rtw_free_recv_priv(struct recv_priv *precvpriv)
 	vfree(precvpriv->pallocated_frame_buf);
 
 	rtl8188eu_free_recv_priv(padapter);
+	_cancel_timer_ex(&precvpriv->signal_stat_timer);
 }
 
 struct recv_frame *_rtw_alloc_recvframe(struct __queue *pfree_recv_queue)
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v2 2/2] staging: r8188eu: proper error handling in rtw_init_drv_sw
  2022-03-09 20:50 [PATCH v2 0/2] staging: r8188eu: improve error handling Vihas Makwana
  2022-03-09 20:50 ` [PATCH v2 1/2] staging: r8188eu: call _cancel_timer_ex from _rtw_free_recv_priv Vihas Makwana
@ 2022-03-09 20:50 ` Vihas Makwana
  2022-03-15 14:19   ` Greg Kroah-Hartman
  1 sibling, 1 reply; 5+ messages in thread
From: Vihas Makwana @ 2022-03-09 20:50 UTC (permalink / raw)
  To: Larry Finger, Phillip Potter, Greg Kroah-Hartman,
	Michael Straube, Martin Kaiser, Dan Carpenter, Pavel Skripkin
  Cc: linux-staging, linux-kernel, Vihas Makwana

The code inside rtw_init_drv_sw() calls various init functions to
populate the padapter structure and checks for their return values
respectively.
But if one of the functions in middle fails then it simply returns
_FAIL instead of proper logging and calling freeing counterparts
of previous init functions.
This leads to various memory leaks and can be found in
/sys/kernel/debug/kmemleak if kernel is compiled with DEBUG_KMEMLEAK=y.

Fix this and keep the success and error separate.

Fixes: 2b42bd58b321 ("staging: r8188eu: introduce new os_dep dir for
RTL8188eu driver")

Reviewed-by: Dan Carpenter <dan.carpenter@oracle.com>
Reviewed-by: Pavel Skripkin <paskripkin@gmail.com>
Signed-off-by: Vihas Makwana <makvihas@gmail.com>
---
Tested on Comfast CF-WU810N RTL8188EUS wireless adapter.
---
 drivers/staging/r8188eu/os_dep/os_intfs.c | 60 ++++++++++++++++++-----
 1 file changed, 47 insertions(+), 13 deletions(-)

diff --git a/drivers/staging/r8188eu/os_dep/os_intfs.c b/drivers/staging/r8188eu/os_dep/os_intfs.c
index 197568422..f59b23dc6 100644
--- a/drivers/staging/r8188eu/os_dep/os_intfs.c
+++ b/drivers/staging/r8188eu/os_dep/os_intfs.c
@@ -469,32 +469,46 @@ u8 rtw_reset_drv_sw(struct adapter *padapter)
 
 u8 rtw_init_drv_sw(struct adapter *padapter)
 {
-	if ((rtw_init_cmd_priv(&padapter->cmdpriv)) == _FAIL)
+	if ((rtw_init_cmd_priv(&padapter->cmdpriv)) == _FAIL) {
+		dev_err(dvobj_to_dev(padapter->dvobj), "rtw_init_cmd_priv failed\n");
 		return _FAIL;
+	}
 
 	padapter->cmdpriv.padapter = padapter;
 
-	if ((rtw_init_evt_priv(&padapter->evtpriv)) == _FAIL)
-		return _FAIL;
+	if ((rtw_init_evt_priv(&padapter->evtpriv)) == _FAIL) {
+		dev_err(dvobj_to_dev(padapter->dvobj), "rtw_init_evt_priv failed\n");
+		goto free_cmd_priv;
+	}
 
-	if (rtw_init_mlme_priv(padapter) == _FAIL)
-		return _FAIL;
+	if (rtw_init_mlme_priv(padapter) == _FAIL) {
+		dev_err(dvobj_to_dev(padapter->dvobj), "rtw_init_mlme_priv failed\n");
+		goto free_evt_priv;
+	}
 
 	rtw_init_wifidirect_timers(padapter);
 	init_wifidirect_info(padapter, P2P_ROLE_DISABLE);
 	reset_global_wifidirect_info(padapter);
 
-	if (init_mlme_ext_priv(padapter) == _FAIL)
-		return _FAIL;
+	if (init_mlme_ext_priv(padapter) == _FAIL) {
+		dev_err(dvobj_to_dev(padapter->dvobj), "init_mlme_ext_priv failed\n");
+		goto free_mlme_priv;
+	}
 
-	if (_rtw_init_xmit_priv(&padapter->xmitpriv, padapter) == _FAIL)
-		return _FAIL;
+	if (_rtw_init_xmit_priv(&padapter->xmitpriv, padapter) == _FAIL) {
+		dev_err(dvobj_to_dev(padapter->dvobj), "_rtw_init_xmit_priv failed\n");
+		goto free_mlme_ext;
+	}
 
-	if (_rtw_init_recv_priv(&padapter->recvpriv, padapter) == _FAIL)
-		return _FAIL;
+	if (_rtw_init_recv_priv(&padapter->recvpriv, padapter) == _FAIL) {
+		dev_err(dvobj_to_dev(padapter->dvobj), "_rtw_init_recv_priv failed\n");
+		goto free_xmit_priv;
+	}
 
-	if (_rtw_init_sta_priv(&padapter->stapriv) == _FAIL)
-		return _FAIL;
+	if (_rtw_init_sta_priv(&padapter->stapriv) == _FAIL) {
+		dev_err(dvobj_to_dev(padapter->dvobj), "_rtw_init_sta_priv failed\n");
+		goto free_recv_priv;
+	}
 
 	padapter->stapriv.padapter = padapter;
 
@@ -510,6 +524,26 @@ u8 rtw_init_drv_sw(struct adapter *padapter)
 	spin_lock_init(&padapter->br_ext_lock);
 
 	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);
+
+free_mlme_priv:
+	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;
 }
 
 void rtw_cancel_all_timer(struct adapter *padapter)
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 2/2] staging: r8188eu: proper error handling in rtw_init_drv_sw
  2022-03-09 20:50 ` [PATCH v2 2/2] staging: r8188eu: proper error handling in rtw_init_drv_sw Vihas Makwana
@ 2022-03-15 14:19   ` Greg Kroah-Hartman
  2022-03-16  6:56     ` Vihas Makwana
  0 siblings, 1 reply; 5+ messages in thread
From: Greg Kroah-Hartman @ 2022-03-15 14:19 UTC (permalink / raw)
  To: Vihas Makwana
  Cc: Larry Finger, Phillip Potter, Michael Straube, Martin Kaiser,
	Dan Carpenter, Pavel Skripkin, linux-staging, linux-kernel

On Thu, Mar 10, 2022 at 02:20:47AM +0530, Vihas Makwana wrote:
> The code inside rtw_init_drv_sw() calls various init functions to
> populate the padapter structure and checks for their return values
> respectively.
> But if one of the functions in middle fails then it simply returns
> _FAIL instead of proper logging and calling freeing counterparts
> of previous init functions.
> This leads to various memory leaks and can be found in
> /sys/kernel/debug/kmemleak if kernel is compiled with DEBUG_KMEMLEAK=y.
> 
> Fix this and keep the success and error separate.
> 
> Fixes: 2b42bd58b321 ("staging: r8188eu: introduce new os_dep dir for
> RTL8188eu driver")

Nit, that needed to be on one line, and no blank line before the next
ones.

I've fixed it up now.

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 2/2] staging: r8188eu: proper error handling in rtw_init_drv_sw
  2022-03-15 14:19   ` Greg Kroah-Hartman
@ 2022-03-16  6:56     ` Vihas Makwana
  0 siblings, 0 replies; 5+ messages in thread
From: Vihas Makwana @ 2022-03-16  6:56 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Larry Finger, Phillip Potter, Michael Straube, Martin Kaiser,
	Dan Carpenter, Pavel Skripkin, linux-staging, linux-kernel

> On Thu, Mar 10, 2022 at 02:20:47AM +0530, Vihas Makwana wrote:
> > The code inside rtw_init_drv_sw() calls various init functions to
> > populate the padapter structure and checks for their return values
> > respectively.
> > But if one of the functions in middle fails then it simply returns
> > _FAIL instead of proper logging and calling freeing counterparts
> > of previous init functions.
> > This leads to various memory leaks and can be found in
> > /sys/kernel/debug/kmemleak if kernel is compiled with DEBUG_KMEMLEAK=y.
> >
> > Fix this and keep the success and error separate.
> >
> > Fixes: 2b42bd58b321 ("staging: r8188eu: introduce new os_dep dir for
> > RTL8188eu driver")
>
> Nit, that needed to be on one line, and no blank line before the next
> ones.
>

Oh okay. I will take care of that when submitting patches in future.

> I've fixed it up now.
>

Thanks Greg.

On Tue, Mar 15, 2022 at 7:49 PM Greg Kroah-Hartman
<gregkh@linuxfoundation.org> wrote:
>
> On Thu, Mar 10, 2022 at 02:20:47AM +0530, Vihas Makwana wrote:
> > The code inside rtw_init_drv_sw() calls various init functions to
> > populate the padapter structure and checks for their return values
> > respectively.
> > But if one of the functions in middle fails then it simply returns
> > _FAIL instead of proper logging and calling freeing counterparts
> > of previous init functions.
> > This leads to various memory leaks and can be found in
> > /sys/kernel/debug/kmemleak if kernel is compiled with DEBUG_KMEMLEAK=y.
> >
> > Fix this and keep the success and error separate.
> >
> > Fixes: 2b42bd58b321 ("staging: r8188eu: introduce new os_dep dir for
> > RTL8188eu driver")
>
> Nit, that needed to be on one line, and no blank line before the next
> ones.
>
> I've fixed it up now.
>
> thanks,
>
> greg k-h



-- 
Thanks,
Vihas

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-03-16  6:56 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-09 20:50 [PATCH v2 0/2] staging: r8188eu: improve error handling Vihas Makwana
2022-03-09 20:50 ` [PATCH v2 1/2] staging: r8188eu: call _cancel_timer_ex from _rtw_free_recv_priv Vihas Makwana
2022-03-09 20:50 ` [PATCH v2 2/2] staging: r8188eu: proper error handling in rtw_init_drv_sw Vihas Makwana
2022-03-15 14:19   ` Greg Kroah-Hartman
2022-03-16  6:56     ` Vihas Makwana

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).