qla2x00t-32gbit, target: Fix a memory leak in an error path

Detected by Coverity.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8245 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
Bart Van Assche
2019-04-18 01:31:56 +00:00
parent ff068db717
commit 3e0dbd0756

View File

@@ -817,7 +817,7 @@ static void sqa_free_sesess(struct se_session *se_sess)
static int sqa_qla2xxx_check_initiator_node_acl(scsi_qla_host_t *vha,
unsigned char *fc_wwpn, struct fc_port *fcport)
{
int res = 0;
int res = -ENOMEM;
char *ini_name;
struct se_session *se_sess;
struct scst_session *scst_sess;
@@ -831,7 +831,7 @@ static int sqa_qla2xxx_check_initiator_node_acl(scsi_qla_host_t *vha,
se_sess = sqa_alloc_sesess(vha);
if (!se_sess)
return -ENOMEM;
return res;
/* Create the SCST session. */
ini_name = kasprintf(GFP_KERNEL,
@@ -839,11 +839,12 @@ static int sqa_qla2xxx_check_initiator_node_acl(scsi_qla_host_t *vha,
fc_wwpn[0], fc_wwpn[1], fc_wwpn[2], fc_wwpn[3],
fc_wwpn[4], fc_wwpn[5], fc_wwpn[6], fc_wwpn[7]);
if (!ini_name)
return -ENOMEM;
goto free_sess;
memcpy(fcport->port_name, fc_wwpn, sizeof(fcport->port_name));
sqa_tgt = (struct sqa_scst_tgt*)vha->vha_tgt.target_lport_ptr;
res = -ESRCH;
scst_sess = scst_register_session(sqa_tgt->scst_tgt, 0,
ini_name, fcport, NULL, NULL);
if (scst_sess == NULL) {
@@ -851,19 +852,23 @@ static int sqa_qla2xxx_check_initiator_node_acl(scsi_qla_host_t *vha,
"failed, all commands will be refused: "
"pwwn=%s", vha->host_no, vha->vp_idx,
ini_name);
sqa_free_sesess(se_sess);
res = -ESRCH;
} else {
spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags);
se_sess->fabric_sess_ptr = (void*)scst_sess;
fcport->se_sess = se_sess;
spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
goto free_sess;
}
spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags);
se_sess->fabric_sess_ptr = scst_sess;
fcport->se_sess = se_sess;
spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
out:
kfree(ini_name);
TRACE_EXIT_RES(res);
return res;
free_sess:
sqa_free_sesess(se_sess);
goto out;
}
static struct fc_port *sqa_qla2xxx_find_sess_by_s_id(scsi_qla_host_t *vha,