Commit 0957627a authored by Nicholas Bellinger's avatar Nicholas Bellinger

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: default avatarDan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
parent 03e98c9e
...@@ -224,7 +224,7 @@ static int iscsi_login_zero_tsih_s1( ...@@ -224,7 +224,7 @@ static int iscsi_login_zero_tsih_s1(
iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
ISCSI_LOGIN_STATUS_NO_RESOURCES); ISCSI_LOGIN_STATUS_NO_RESOURCES);
pr_err("Could not allocate memory for session\n"); pr_err("Could not allocate memory for session\n");
return -1; return -ENOMEM;
} }
iscsi_login_set_conn_values(sess, conn, pdu->cid); iscsi_login_set_conn_values(sess, conn, pdu->cid);
...@@ -250,7 +250,8 @@ static int iscsi_login_zero_tsih_s1( ...@@ -250,7 +250,8 @@ static int iscsi_login_zero_tsih_s1(
pr_err("idr_pre_get() for sess_idr failed\n"); pr_err("idr_pre_get() for sess_idr failed\n");
iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
ISCSI_LOGIN_STATUS_NO_RESOURCES); ISCSI_LOGIN_STATUS_NO_RESOURCES);
return -1; kfree(sess);
return -ENOMEM;
} }
spin_lock(&sess_idr_lock); spin_lock(&sess_idr_lock);
idr_get_new(&sess_idr, NULL, &sess->session_index); idr_get_new(&sess_idr, NULL, &sess->session_index);
...@@ -270,14 +271,16 @@ static int iscsi_login_zero_tsih_s1( ...@@ -270,14 +271,16 @@ static int iscsi_login_zero_tsih_s1(
ISCSI_LOGIN_STATUS_NO_RESOURCES); ISCSI_LOGIN_STATUS_NO_RESOURCES);
pr_err("Unable to allocate memory for" pr_err("Unable to allocate memory for"
" struct iscsi_sess_ops.\n"); " struct iscsi_sess_ops.\n");
return -1; kfree(sess);
return -ENOMEM;
} }
sess->se_sess = transport_init_session(); 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, iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
ISCSI_LOGIN_STATUS_NO_RESOURCES); ISCSI_LOGIN_STATUS_NO_RESOURCES);
return -1; kfree(sess);
return -ENOMEM;
} }
return 0; return 0;
......
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