: memory leak in rtw_free_cmd_obj if command is (_Set_Drv_Extra)
PATCH 1/1 : memory leak in rtw_free_cmd_obj if command is (_Set_Drv_Extra)
pcmd->parmbuf->pbuf has been allocated if command is GEN_CMD_CODE(_Set_Drv_Extra), and it enqueued by rtw_enqueue_cmd. rtw_cmd_thread dequeue pcmd by rtw_dequeue_cmd. The memory leak happened on this branch "if( _FAIL == rtw_cmd_filter(pcmdpriv, pcmd) )" which goto post_process directly against freeing pcmd->parmbuf->pbuf in rtw_drvextra_cmd_hdl which is the cmd_hdl if command is (_Set_Drv_Extra). This patch free pcmd->parmbuf->pbuf on the forgotten branch to avoid memory leak.
drivers/staging/rtl8188eu/core/rtw_cmd.c +6 -1
@@ -288,7 +288,7 @@ int rtw_cmd_thread(void *context)void (*pcmd_callback)(struct adapter *dev,struct cmd_obj *pcmd);struct adapter *padapter = (struct adapter *)context;struct cmd_priv *pcmdpriv = &(padapter->cmdpriv); - +struct drvextra_cmd_parm *extra_parm =NULL ;thread_enter ("RTW_CMD_THREAD" );
@@ -323,6 +323,11 @@ _next:if (_FAIL ==rtw_cmd_filter (pcmdpriv, pcmd)) { pcmd->res =H2C_DROPPED ; +if (pcmd->cmdcode ==GEN_CMD_CODE (_Set_Drv_Extra)) { + extra_parm = (struct drvextra_cmd_parm *)pcmd->parmbuf; +if (extra_parm && extra_parm->pbuf && extra_parm->size >0 ) +rtw_mfree (extra_parm->pbuf, extra_parm->size); + } goto post_process; }
Hi,
Quoted 51 lines
-----Original Message-----
From: Wang, Xiaoming
Sent: Monday, March 10, 2014 11:38 PM
To: [email protected]; [email protected]; [email protected]; [email protected]
Cc: [email protected]; [email protected]; Zhang, Dongxing; Wang, Xiaoming; Liu, Chuansheng
Subject: [PATCH] [staging][r8188eu]: memory leak inrtw_free_cmd_objif command is (_Set_Drv_Extra)
pcmd->parmbuf->pbufhas been allocated if command isGEN_CMD_CODE(_Set_Drv_Extra),
and it enqueued byrtw_enqueue_cmd.rtw_cmd_threaddequeue pcmd byrtw_dequeue_cmd.
The memory leak happened on this branch "if( _FAIL == rtw_cmd_filter(pcmdpriv, pcmd) )"
which gotopost_processdirectly against freeingpcmd->parmbuf->pbufinrtw_drvextra_cmd_hdlwhich is thecmd_hdlif command is (_Set_Drv_Extra). This patch freepcmd->parmbuf->pbufon the forgotten branch to avoid memory leak.Signed-off-by Zhang Dongxing <[email protected]>Signed-off-by xiaoming wang <[email protected]>drivers/staging/rtl8188eu/core/rtw_cmd.c +5
-1@@ -288,7 +288,7 @@ int rtw_cmd_thread(void *context)void (*pcmd_callback)(struct adapter *dev,struct cmd_obj *pcmd);struct adapter *padapter = (struct adapter *)context;struct cmd_priv *pcmdpriv = &(padapter->cmdpriv); - +struct drvextra_cmd_parm *extra_parm =NULL ;thread_enter ("RTW_CMD_THREAD" );@@ -323,6 +323,11 @@ _next:if (_FAIL ==rtw_cmd_filter (pcmdpriv, pcmd)) { pcmd->res =H2C_DROPPED ; +if (pcmd->cmdcode ==GEN_CMD_CODE (_Set_Drv_Extra)) { + extra_parm = (struct drvextra_cmd_parm *)pcmd->parmbuf; +if (extra_parm && extra_parm->pbuf && extra_parm->size >0 ) + rtw_mfree(extra_parm->pbuf,
extra_parm->size);
+ }
Quoted 3 lines
goto post_process;
}Thanks.
Best Regards
Chuansheng
���{.n�+�������+%�����ݶ��w��{.n�+����{��G�����{ay�ʇڙ�,j��f���h��������z_�(�階�ݢj"���m������G������?����&���~��iO��z��v�^�m����������?�I�
Greg KH
maintainerQuoted 26 lines · Xiaoming
pcmd->parmbuf->pbufhas been allocated if command isGEN_CMD_CODE(_Set_Drv_Extra), and it enqueued byrtw_enqueue_cmd.rtw_cmd_threaddequeue pcmd byrtw_dequeue_cmd. The memory leak happened on this branch "if( _FAIL == rtw_cmd_filter(pcmdpriv, pcmd) )" which gotopost_processdirectly against freeingpcmd->parmbuf->pbufinrtw_drvextra_cmd_hdlwhich is thecmd_hdlif command is (_Set_Drv_Extra). This patch freepcmd->parmbuf->pbufon the forgotten branch to avoid memory leak.Signed-off-by Zhang Dongxing <[email protected]>Signed-off-by xiaoming wang <[email protected]>Reviewed-by Chuansheng Liu <[email protected]>drivers/staging/rtl8188eu/core/rtw_cmd.c +1
-1@@ -288,7 +288,7 @@ int rtw_cmd_thread(void *context)void (*pcmd_callback)(struct adapter *dev,struct cmd_obj *pcmd);struct adapter *padapter = (struct adapter *)context;struct cmd_priv *pcmdpriv = &(padapter->cmdpriv); - +struct drvextra_cmd_parm *extra_parm =NULL ;thread_enter ("RTW_CMD_THREAD" );@@ -323,6 +323,11 @@ _next:
drivers/staging/rtl8188eu/core/rtw_cmd.c _next: · line 333
Quoted 10 lines
drivers/staging/rtl8188eu/core/rtw_cmd.c +5
-0if (_FAIL ==rtw_cmd_filter (pcmdpriv, pcmd)) { pcmd->res =H2C_DROPPED ; +if (pcmd->cmdcode ==GEN_CMD_CODE (_Set_Drv_Extra)) { + extra_parm = (struct drvextra_cmd_parm *)pcmd->parmbuf; +if (extra_parm && extra_parm->pbuf && extra_parm->size >0 ) +rtw_mfree (extra_parm->pbuf, extra_parm->size); + } goto post_process; }
This patch has all the tabs converted to spaces and can not be applied :(
Please fix your email client and try again.
greg k-h