Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e375870b authored by Larry Finger's avatar Larry Finger Committed by Greg Kroah-Hartman
Browse files

staging: r8712u: Fix memory leak in firmware loading



The error path leaks the firmware struct.

Signed-off-by: default avatarLarry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 8e290fd4
Loading
Loading
Loading
Loading
+7 −4
Original line number Original line Diff line number Diff line
@@ -128,12 +128,13 @@ static u8 rtl8712_dl_fw(struct _adapter *padapter)
	u8 *ptmpchar = NULL, *ppayload, *ptr;
	u8 *ptmpchar = NULL, *ppayload, *ptr;
	struct tx_desc *ptx_desc;
	struct tx_desc *ptx_desc;
	u32 txdscp_sz = sizeof(struct tx_desc);
	u32 txdscp_sz = sizeof(struct tx_desc);
	u8 ret = _FAIL;


	ulfilelength = rtl871x_open_fw(padapter, &phfwfile_hdl, &pmappedfw);
	ulfilelength = rtl871x_open_fw(padapter, &phfwfile_hdl, &pmappedfw);
	if (pmappedfw && (ulfilelength > 0)) {
	if (pmappedfw && (ulfilelength > 0)) {
		update_fwhdr(&fwhdr, pmappedfw);
		update_fwhdr(&fwhdr, pmappedfw);
		if (chk_fwhdr(&fwhdr, ulfilelength) == _FAIL)
		if (chk_fwhdr(&fwhdr, ulfilelength) == _FAIL)
			goto exit_fail;
			goto firmware_rel;
		fill_fwpriv(padapter, &fwhdr.fwpriv);
		fill_fwpriv(padapter, &fwhdr.fwpriv);
		/* firmware check ok */
		/* firmware check ok */
		maxlen = (fwhdr.img_IMEM_size > fwhdr.img_SRAM_size) ?
		maxlen = (fwhdr.img_IMEM_size > fwhdr.img_SRAM_size) ?
@@ -141,7 +142,7 @@ static u8 rtl8712_dl_fw(struct _adapter *padapter)
		maxlen += txdscp_sz;
		maxlen += txdscp_sz;
		ptmpchar = _malloc(maxlen + FWBUFF_ALIGN_SZ);
		ptmpchar = _malloc(maxlen + FWBUFF_ALIGN_SZ);
		if (ptmpchar == NULL)
		if (ptmpchar == NULL)
			return _FAIL;
			goto firmware_rel;


		ptx_desc = (struct tx_desc *)(ptmpchar + FWBUFF_ALIGN_SZ -
		ptx_desc = (struct tx_desc *)(ptmpchar + FWBUFF_ALIGN_SZ -
			    ((addr_t)(ptmpchar) & (FWBUFF_ALIGN_SZ - 1)));
			    ((addr_t)(ptmpchar) & (FWBUFF_ALIGN_SZ - 1)));
@@ -273,11 +274,13 @@ static u8 rtl8712_dl_fw(struct _adapter *padapter)
			goto exit_fail;
			goto exit_fail;
	} else
	} else
		goto exit_fail;
		goto exit_fail;
	return _SUCCESS;
	ret = _SUCCESS;


exit_fail:
exit_fail:
	kfree(ptmpchar);
	kfree(ptmpchar);
	return _FAIL;
firmware_rel:
	release_firmware((struct firmware *)phfwfile_hdl);
	return ret;
}
}


uint rtl8712_hal_init(struct _adapter *padapter)
uint rtl8712_hal_init(struct _adapter *padapter)