staging: r8712u: Fix memory leak in firmware loading

The error path leaks the firmware struct.

Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

authored by Larry Finger and committed by Greg Kroah-Hartman e375870b 8e290fd4

+7 -4
+7 -4
drivers/staging/rtl8712/hal_init.c
··· 128 u8 *ptmpchar = NULL, *ppayload, *ptr; 129 struct tx_desc *ptx_desc; 130 u32 txdscp_sz = sizeof(struct tx_desc); 131 132 ulfilelength = rtl871x_open_fw(padapter, &phfwfile_hdl, &pmappedfw); 133 if (pmappedfw && (ulfilelength > 0)) { 134 update_fwhdr(&fwhdr, pmappedfw); 135 if (chk_fwhdr(&fwhdr, ulfilelength) == _FAIL) 136 - goto exit_fail; 137 fill_fwpriv(padapter, &fwhdr.fwpriv); 138 /* firmware check ok */ 139 maxlen = (fwhdr.img_IMEM_size > fwhdr.img_SRAM_size) ? ··· 142 maxlen += txdscp_sz; 143 ptmpchar = _malloc(maxlen + FWBUFF_ALIGN_SZ); 144 if (ptmpchar == NULL) 145 - return _FAIL; 146 147 ptx_desc = (struct tx_desc *)(ptmpchar + FWBUFF_ALIGN_SZ - 148 ((addr_t)(ptmpchar) & (FWBUFF_ALIGN_SZ - 1))); ··· 274 goto exit_fail; 275 } else 276 goto exit_fail; 277 - return _SUCCESS; 278 279 exit_fail: 280 kfree(ptmpchar); 281 - return _FAIL; 282 } 283 284 uint rtl8712_hal_init(struct _adapter *padapter)
··· 128 u8 *ptmpchar = NULL, *ppayload, *ptr; 129 struct tx_desc *ptx_desc; 130 u32 txdscp_sz = sizeof(struct tx_desc); 131 + u8 ret = _FAIL; 132 133 ulfilelength = rtl871x_open_fw(padapter, &phfwfile_hdl, &pmappedfw); 134 if (pmappedfw && (ulfilelength > 0)) { 135 update_fwhdr(&fwhdr, pmappedfw); 136 if (chk_fwhdr(&fwhdr, ulfilelength) == _FAIL) 137 + goto firmware_rel; 138 fill_fwpriv(padapter, &fwhdr.fwpriv); 139 /* firmware check ok */ 140 maxlen = (fwhdr.img_IMEM_size > fwhdr.img_SRAM_size) ? ··· 141 maxlen += txdscp_sz; 142 ptmpchar = _malloc(maxlen + FWBUFF_ALIGN_SZ); 143 if (ptmpchar == NULL) 144 + goto firmware_rel; 145 146 ptx_desc = (struct tx_desc *)(ptmpchar + FWBUFF_ALIGN_SZ - 147 ((addr_t)(ptmpchar) & (FWBUFF_ALIGN_SZ - 1))); ··· 273 goto exit_fail; 274 } else 275 goto exit_fail; 276 + ret = _SUCCESS; 277 278 exit_fail: 279 kfree(ptmpchar); 280 + firmware_rel: 281 + release_firmware((struct firmware *)phfwfile_hdl); 282 + return ret; 283 } 284 285 uint rtl8712_hal_init(struct _adapter *padapter)