diff --git a/lib/iscsi/init_grp.c b/lib/iscsi/init_grp.c index 33b7bfc38..4dcd64fc8 100644 --- a/lib/iscsi/init_grp.c +++ b/lib/iscsi/init_grp.c @@ -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; diff --git a/lib/iscsi/iscsi.c b/lib/iscsi/iscsi.c index a2c22ae69..e9d2383ab 100644 --- a/lib/iscsi/iscsi.c +++ b/lib/iscsi/iscsi.c @@ -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; } diff --git a/lib/iscsi/iscsi.h b/lib/iscsi/iscsi.h index 7334f843b..343207b03 100644 --- a/lib/iscsi/iscsi.h +++ b/lib/iscsi/iscsi.h @@ -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 diff --git a/lib/iscsi/tgt_node.c b/lib/iscsi/tgt_node.c index 97b5bbe16..a7521bf3b 100644 --- a/lib/iscsi/tgt_node.c +++ b/lib/iscsi/tgt_node.c @@ -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) {