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

[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
...@@ -2131,13 +2131,16 @@ csio_hw_flash_config(struct csio_hw *hw, u32 *fw_cfg_param, char *path) ...@@ -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); value_to_add = 4 - (cf->size % 4);
cfg_data = kzalloc(cf->size+value_to_add, GFP_KERNEL); cfg_data = kzalloc(cf->size+value_to_add, GFP_KERNEL);
if (cfg_data == NULL) if (cfg_data == NULL) {
return -ENOMEM; ret = -ENOMEM;
goto leave;
}
memcpy((void *)cfg_data, (const void *)cf->data, cf->size); memcpy((void *)cfg_data, (const void *)cf->data, cf->size);
if (csio_hw_check_fwconfig(hw, fw_cfg_param) != 0) {
if (csio_hw_check_fwconfig(hw, fw_cfg_param) != 0) ret = -EINVAL;
return -EINVAL; goto leave;
}
mtype = FW_PARAMS_PARAM_Y_GET(*fw_cfg_param); mtype = FW_PARAMS_PARAM_Y_GET(*fw_cfg_param);
maddr = FW_PARAMS_PARAM_Z_GET(*fw_cfg_param) << 16; 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) ...@@ -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); strncpy(path, "/lib/firmware/" CSIO_CF_FNAME, 64);
} }
leave:
kfree(cfg_data); kfree(cfg_data);
release_firmware(cf); release_firmware(cf);
return ret; return ret;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment