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 > > > ��.n��������+%������w��{.n�����{���zW����ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f