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

Commit 02db3db5 authored by Jesper Juhl's avatar Jesper Juhl Committed by James Bottomley
Browse files

[SCSI] csiostor: Don't leak mem or fail to release firmware in csio_hw_flash_config()



If kzalloc() or csio_hw_check_fwconfig() fail we may leave the
csio_hw_flash_config() function without freeing allocated memory or
firmware. This should take care of the leaks.

Signed-off-by: default avatarJesper Juhl <jj@chaosbits.net>
Acked-by: default avatarNaresh Kumar Inna <naresh@chelsio.com>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent 2b82d825
Loading
Loading
Loading
Loading
+9 −6
Original line number Diff line number Diff line
@@ -2131,13 +2131,16 @@ csio_hw_flash_config(struct csio_hw *hw, u32 *fw_cfg_param, char *path)
		value_to_add = 4 - (cf->size % 4);

	cfg_data = kzalloc(cf->size+value_to_add, GFP_KERNEL);
	if (cfg_data == NULL)
		return -ENOMEM;
	if (cfg_data == NULL) {
		ret = -ENOMEM;
		goto leave;
	}

	memcpy((void *)cfg_data, (const void *)cf->data, cf->size);

	if (csio_hw_check_fwconfig(hw, fw_cfg_param) != 0)
		return -EINVAL;
	if (csio_hw_check_fwconfig(hw, fw_cfg_param) != 0) {
		ret = -EINVAL;
		goto leave;
	}

	mtype = FW_PARAMS_PARAM_Y_GET(*fw_cfg_param);
	maddr = FW_PARAMS_PARAM_Z_GET(*fw_cfg_param) << 16;
@@ -2149,9 +2152,9 @@ csio_hw_flash_config(struct csio_hw *hw, u32 *fw_cfg_param, char *path)
		strncpy(path, "/lib/firmware/" CSIO_CF_FNAME, 64);
	}

leave:
	kfree(cfg_data);
	release_firmware(cf);

	return ret;
}