iscsi-target: Fix sess allocation leak in iscsi_login_zero_tsih_s1
This patch adds missing kfree() for an allocation in iscsi_login_zero_tsih_s1() code, and make transport_init_session() check for IS_ERR() returns. Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
This commit is contained in:
parent
03e98c9eb9
commit
0957627a99
|
@ -224,7 +224,7 @@ static int iscsi_login_zero_tsih_s1(
|
|||
iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
|
||||
ISCSI_LOGIN_STATUS_NO_RESOURCES);
|
||||
pr_err("Could not allocate memory for session\n");
|
||||
return -1;
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
iscsi_login_set_conn_values(sess, conn, pdu->cid);
|
||||
|
@ -250,7 +250,8 @@ static int iscsi_login_zero_tsih_s1(
|
|||
pr_err("idr_pre_get() for sess_idr failed\n");
|
||||
iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
|
||||
ISCSI_LOGIN_STATUS_NO_RESOURCES);
|
||||
return -1;
|
||||
kfree(sess);
|
||||
return -ENOMEM;
|
||||
}
|
||||
spin_lock(&sess_idr_lock);
|
||||
idr_get_new(&sess_idr, NULL, &sess->session_index);
|
||||
|
@ -270,14 +271,16 @@ static int iscsi_login_zero_tsih_s1(
|
|||
ISCSI_LOGIN_STATUS_NO_RESOURCES);
|
||||
pr_err("Unable to allocate memory for"
|
||||
" struct iscsi_sess_ops.\n");
|
||||
return -1;
|
||||
kfree(sess);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
sess->se_sess = transport_init_session();
|
||||
if (!sess->se_sess) {
|
||||
if (IS_ERR(sess->se_sess)) {
|
||||
iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
|
||||
ISCSI_LOGIN_STATUS_NO_RESOURCES);
|
||||
return -1;
|
||||
kfree(sess);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue