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