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:
parent
af034b6de4
commit
e8b6523280
@ -83,6 +83,11 @@ spdk_iscsi_init_grp_add_initiator(struct spdk_iscsi_init_grp *ig, char *name)
|
|||||||
return -EPERM;
|
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);
|
iname = spdk_iscsi_init_grp_find_initiator(ig, name);
|
||||||
if (iname != NULL) {
|
if (iname != NULL) {
|
||||||
return -EEXIST;
|
return -EEXIST;
|
||||||
|
@ -1631,7 +1631,7 @@ spdk_iscsi_op_login_phase_none(struct spdk_iscsi_conn *conn,
|
|||||||
int alloc_len, int cid)
|
int alloc_len, int cid)
|
||||||
{
|
{
|
||||||
enum session_type session_type;
|
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 iscsi_bhs_login_rsp *rsph;
|
||||||
struct spdk_iscsi_tgt_node *target = NULL;
|
struct spdk_iscsi_tgt_node *target = NULL;
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
@ -1641,7 +1641,7 @@ spdk_iscsi_op_login_phase_none(struct spdk_iscsi_conn *conn,
|
|||||||
conn->dev = NULL;
|
conn->dev = NULL;
|
||||||
|
|
||||||
rc = spdk_iscsi_op_login_initialize_port(conn, rsp_pdu,
|
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) {
|
if (rc < 0) {
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
@ -51,8 +51,9 @@
|
|||||||
#define SPDK_ISCSI_DEFAULT_NODEBASE "iqn.2016-06.io.spdk"
|
#define SPDK_ISCSI_DEFAULT_NODEBASE "iqn.2016-06.io.spdk"
|
||||||
|
|
||||||
#define DEFAULT_MAXR2T 4
|
#define DEFAULT_MAXR2T 4
|
||||||
#define MAX_INITIATOR_NAME 256
|
#define MAX_INITIATOR_PORT_NAME 256
|
||||||
#define MAX_TARGET_NAME 256
|
#define MAX_INITIATOR_NAME 223
|
||||||
|
#define MAX_TARGET_NAME 223
|
||||||
|
|
||||||
#define MAX_PORTAL 1024
|
#define MAX_PORTAL 1024
|
||||||
#define MAX_INITIATOR 256
|
#define MAX_INITIATOR 256
|
||||||
|
@ -792,6 +792,11 @@ spdk_check_iscsi_name(const char *name)
|
|||||||
const unsigned char *up = (const unsigned char *) name;
|
const unsigned char *up = (const unsigned char *) name;
|
||||||
size_t n;
|
size_t n;
|
||||||
|
|
||||||
|
/* valid iSCSI name no larger than 223 bytes */
|
||||||
|
if (strlen(name) > MAX_TARGET_NAME) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
/* valid iSCSI name? */
|
/* valid iSCSI name? */
|
||||||
for (n = 0; up[n] != 0; n++) {
|
for (n = 0; up[n] != 0; n++) {
|
||||||
if (up[n] > 0x00U && up[n] <= 0x2cU) {
|
if (up[n] > 0x00U && up[n] <= 0x2cU) {
|
||||||
|
Loading…
Reference in New Issue
Block a user