SCSI: target: dereferencing ERR_PTRs
Subsystems (3)
PATCH v2 1/4 SCSI: target: dereferencing ERR_PTRs
In reply to a message not in the archivetransport_init_session() and core_tmr_alloc_req() never return NULL, they only return ERR_PTRs on error.
Signed-off-by Dan Carpenter <[email protected]>
---
v2: return PTR_ERR(tl_nexus->se_sess); for Ankit Jain.
drivers/target/tcm_fc/tfc_sess.c +1 -1
@@ -229,7 +229,7 @@ static struct ft_sess *ft_sess_create(struct ft_tport *tport, u32 port_id,return NULL ; sess->se_sess =transport_init_session (); -if (!sess->se_sess) { +if (IS_ERR (sess->se_sess)) {kfree (sess);return NULL ; }
drivers/target/loopback/tcm_loop.c +7 -3
@@ -386,7 +386,7 @@ static int tcm_loop_device_reset(struct scsi_cmnd *sc)*/ se_cmd->se_tmr_req =core_tmr_alloc_req (se_cmd, (void *)tl_tmr,TMR_LUN_RESET ); -if (!se_cmd->se_tmr_req) +if (IS_ERR (se_cmd->se_tmr_req)) goto release;/* * Locate the underlying TCM struct se_lun from sc->device->lun
@@ -1017,6 +1017,7 @@ static int tcm_loop_make_nexus(struct se_portal_group *se_tpg;struct tcm_loop_hba *tl_hba = tl_tpg->tl_hba;struct tcm_loop_nexus *tl_nexus; +int ret = -ENOMEM ;if (tl_tpg->tl_hba->tl_nexus) {printk (KERN_INFO "tl_tpg->tl_hba->tl_nexus already exists\n" );
@@ -1033,8 +1034,11 @@ static int tcm_loop_make_nexus(* Initialize the struct se_session pointer */ tl_nexus->se_sess =transport_init_session (); -if (!tl_nexus->se_sess) +if (IS_ERR (tl_nexus->se_sess)) { + ret =PTR_ERR (tl_nexus->se_sess); goto out; + } +/* * Since we are running in 'demo mode' this call with generate a * struct se_node_acl for the tcm_loop struct se_portal_group with the SCSI
@@ -1060,7 +1064,7 @@ static int tcm_loop_make_nexus( out:kfree (tl_nexus); -return -ENOMEM ; +return ret; } static int tcm_loop_drop_nexus(
Quoted 7 lines · Dan Carpenter
transport_init_session()andcore_tmr_alloc_req()never return NULL, they only returnERR_PTRson error.Signed-off-by Dan Carpenter <[email protected]>---
v2: returnPTR_ERR(tl_nexus->se_sess); for Ankit Jain.
Thanks Dan and Ankit! Committed as 4e559cb1699 into lio-core-2.6.git
--nab
Quoted 56 lines
drivers/target/tcm_fc/tfc_sess.c +1
-1@@ -229,7 +229,7 @@ static struct ft_sess *ft_sess_create(struct ft_tport *tport, u32 port_id,return NULL ; sess->se_sess =transport_init_session (); -if (!sess->se_sess) { +if (IS_ERR (sess->se_sess)) {kfree (sess);return NULL ; }drivers/target/loopback/tcm_loop.c +7
-3@@ -386,7 +386,7 @@ static int tcm_loop_device_reset(struct scsi_cmnd *sc)*/ se_cmd->se_tmr_req =core_tmr_alloc_req (se_cmd, (void *)tl_tmr,TMR_LUN_RESET ); -if (!se_cmd->se_tmr_req) +if (IS_ERR (se_cmd->se_tmr_req)) goto release;/* * Locate the underlying TCM struct se_lun from sc->device->lun @@ -1017,6 +1017,7 @@ static int tcm_loop_make_nexus(struct se_portal_group *se_tpg;struct tcm_loop_hba *tl_hba = tl_tpg->tl_hba;struct tcm_loop_nexus *tl_nexus; +int ret = -ENOMEM ;if (tl_tpg->tl_hba->tl_nexus) {printk (KERN_INFO "tl_tpg->tl_hba->tl_nexus already exists\n" );@@ -1033,8 +1034,11 @@ static int tcm_loop_make_nexus(* Initialize the struct se_session pointer */ tl_nexus->se_sess =transport_init_session (); -if (!tl_nexus->se_sess) +if (IS_ERR (tl_nexus->se_sess)) { + ret =PTR_ERR (tl_nexus->se_sess); goto out; + } +/* * Since we are running in 'demo mode' this call with generate a * struct se_node_acl for the tcm_loop struct se_portal_group with the SCSI @@ -1060,7 +1064,7 @@ static int tcm_loop_make_nexus( out:kfree (tl_nexus); -return -ENOMEM ; +return ret; } static int tcm_loop_drop_nexus(