From e8b65232802cd07074b71398ae349a24ada5f7f8 Mon Sep 17 00:00:00 2001 From: Changpeng Liu Date: Mon, 19 Nov 2018 03:20:32 -0500 Subject: [PATCH] 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 Reviewed-on: https://review.gerrithub.io/433797 Chandler-Test-Pool: SPDK Automated Test System Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Ben Walker Reviewed-by: Shuhei Matsumoto --- lib/iscsi/init_grp.c | 5 +++++ lib/iscsi/iscsi.c | 4 ++-- lib/iscsi/iscsi.h | 5 +++-- lib/iscsi/tgt_node.c | 5 +++++ 4 files changed, 15 insertions(+), 4 deletions(-) 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) {