iscsi: check the length of initiator/target name

According to the RFC3720, the length of initiator name and
target name should not larger than 223 bytes, while here,
add a check for initiator/target name.

Change-Id: I1517a4c4e1b0a944b239665f38f5dfb46f0075d2
Signed-off-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-on: https://review.gerrithub.io/433797
Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
Changpeng Liu 2018-11-19 03:20:32 -05:00
parent af034b6de4
commit e8b6523280
4 changed files with 15 additions and 4 deletions

View File

@ -83,6 +83,11 @@ spdk_iscsi_init_grp_add_initiator(struct spdk_iscsi_init_grp *ig, char *name)
return -EPERM;
}
if (strlen(name) > MAX_INITIATOR_NAME) {
SPDK_ERRLOG("Initiator Name is larger than 223 bytes\n");
return -EINVAL;
}
iname = spdk_iscsi_init_grp_find_initiator(ig, name);
if (iname != NULL) {
return -EEXIST;

View File

@ -1631,7 +1631,7 @@ spdk_iscsi_op_login_phase_none(struct spdk_iscsi_conn *conn,
int alloc_len, int cid)
{
enum session_type session_type;
char initiator_port_name[MAX_INITIATOR_NAME];
char initiator_port_name[MAX_INITIATOR_PORT_NAME];
struct iscsi_bhs_login_rsp *rsph;
struct spdk_iscsi_tgt_node *target = NULL;
int rc = 0;
@ -1641,7 +1641,7 @@ spdk_iscsi_op_login_phase_none(struct spdk_iscsi_conn *conn,
conn->dev = NULL;
rc = spdk_iscsi_op_login_initialize_port(conn, rsp_pdu,
initiator_port_name, MAX_INITIATOR_NAME, params);
initiator_port_name, MAX_INITIATOR_PORT_NAME, params);
if (rc < 0) {
return rc;
}

View File

@ -51,8 +51,9 @@
#define SPDK_ISCSI_DEFAULT_NODEBASE "iqn.2016-06.io.spdk"
#define DEFAULT_MAXR2T 4
#define MAX_INITIATOR_NAME 256
#define MAX_TARGET_NAME 256
#define MAX_INITIATOR_PORT_NAME 256
#define MAX_INITIATOR_NAME 223
#define MAX_TARGET_NAME 223
#define MAX_PORTAL 1024
#define MAX_INITIATOR 256

View File

@ -792,6 +792,11 @@ spdk_check_iscsi_name(const char *name)
const unsigned char *up = (const unsigned char *) name;
size_t n;
/* valid iSCSI name no larger than 223 bytes */
if (strlen(name) > MAX_TARGET_NAME) {
return -1;
}
/* valid iSCSI name? */
for (n = 0; up[n] != 0; n++) {
if (up[n] > 0x00U && up[n] <= 0x2cU) {