[SCSI] ipr: Avoid target_destroy accessing memory after it was freed
Defined target_ids,array_ids and vsets_ids as unsigned long to avoid target_destroy accessing memory after it was freed. Signed-off-by: Wen Xiong <wenxiong@linux.vnet.ibm.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
parent
364398324c
commit
222ab59468
|
@ -8980,19 +8980,6 @@ static int ipr_alloc_mem(struct ipr_ioa_cfg *ioa_cfg)
|
|||
if (!ioa_cfg->res_entries)
|
||||
goto out;
|
||||
|
||||
if (ioa_cfg->sis64) {
|
||||
ioa_cfg->target_ids = kzalloc(sizeof(unsigned long) *
|
||||
BITS_TO_LONGS(ioa_cfg->max_devs_supported), GFP_KERNEL);
|
||||
ioa_cfg->array_ids = kzalloc(sizeof(unsigned long) *
|
||||
BITS_TO_LONGS(ioa_cfg->max_devs_supported), GFP_KERNEL);
|
||||
ioa_cfg->vset_ids = kzalloc(sizeof(unsigned long) *
|
||||
BITS_TO_LONGS(ioa_cfg->max_devs_supported), GFP_KERNEL);
|
||||
|
||||
if (!ioa_cfg->target_ids || !ioa_cfg->array_ids
|
||||
|| !ioa_cfg->vset_ids)
|
||||
goto out_free_res_entries;
|
||||
}
|
||||
|
||||
for (i = 0; i < ioa_cfg->max_devs_supported; i++) {
|
||||
list_add_tail(&ioa_cfg->res_entries[i].queue, &ioa_cfg->free_res_q);
|
||||
ioa_cfg->res_entries[i].ioa_cfg = ioa_cfg;
|
||||
|
@ -9089,9 +9076,6 @@ out_free_vpd_cbs:
|
|||
ioa_cfg->vpd_cbs, ioa_cfg->vpd_cbs_dma);
|
||||
out_free_res_entries:
|
||||
kfree(ioa_cfg->res_entries);
|
||||
kfree(ioa_cfg->target_ids);
|
||||
kfree(ioa_cfg->array_ids);
|
||||
kfree(ioa_cfg->vset_ids);
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
|
|
@ -1440,9 +1440,9 @@ struct ipr_ioa_cfg {
|
|||
/*
|
||||
* Bitmaps for SIS64 generated target values
|
||||
*/
|
||||
unsigned long *target_ids;
|
||||
unsigned long *array_ids;
|
||||
unsigned long *vset_ids;
|
||||
unsigned long target_ids[BITS_TO_LONGS(IPR_MAX_SIS64_DEVS)];
|
||||
unsigned long array_ids[BITS_TO_LONGS(IPR_MAX_SIS64_DEVS)];
|
||||
unsigned long vset_ids[BITS_TO_LONGS(IPR_MAX_SIS64_DEVS)];
|
||||
|
||||
u16 type; /* CCIN of the card */
|
||||
|
||||
|
|
Loading…
Reference in New Issue