Hello there,
________________________________
> but It is not memory leak because If tx queue is complete, kfree() is
> called in mgmt_tx_complete() funtion.
Maybe I've been slightly less than clear. I'll have another go.
There is a call to kmalloc around line 250.
Source code is
mgmt_tx = kmalloc(sizeof(struct tx_complete_mon_data), GFP_ATOMIC);
A few lines later is a second call to kmalloc
mgmt_tx->buff = kmalloc(len, GFP_ATOMIC);
If the second call fails, then proper tidyup would normally include
calling kfree for the first call. This doesn't happen in the error handling
code for the second call.
if (mgmt_tx->buff == NULL) {
PRINT_ER("Failed to allocate memory for mgmt_tx buff\n");
return WILC_FAIL;
}
Not a big bug, I admit, but might be worth fixing.
Something like
if (mgmt_tx->buff == NULL) {
kfree(mgmt);
PRINT_ER("Failed to allocate memory for mgmt_tx buff\n");
return WILC_FAIL;
}
would probably fix it.
My apologies for not being clear earlier.
Regards
David Binderman
>
> Source code is
>
> g_linux_wlan->oup.wlan_add_mgmt_to_tx_que(mgmt_tx, mgmt_tx->buff,
> mgmt_tx->size, mgmt_tx_complete);
>
> static void mgmt_tx_complete(void *priv, int status)
> {
> ...
> kfree(pv_data->buff);
> kfree(pv_data);
> }
>
> BR.
> Chris
>
> On 2015년 07월 27일 17:20, David Binderman wrote:
>
> Hello there,
>
> [linux-4.2-rc4/drivers/staging/wilc1000/linux_mon.c:264]: (error) Memory
> leak: mgmt_tx
>
> Source code is
>
> mgmt_tx->buff = kmalloc(len, GFP_ATOMIC);
> if (mgmt_tx->buff == NULL) {
> PRINT_ER("Failed to allocate memory for mgmt_tx buff\n");
> return WILC_FAIL;
>
> }
>
> Suggest add missing call to kfree.
>
>
> Regards
>
> David Binderman
>
>
>