iscsi: Use not malloc'ed but fixed size string for initiator address
Using malloc'ed string for string in iSCSI target has caused scan-build error. Maximum size of initiator address is already defined to be MAX_INITIATOR_ADDR, and hence use fixed size string whose size is MAX_INITIATOR_ADDR + 1 for spdk_iscsi_initiator_mask::mask. This change will reduce the potential malloc failure. Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Change-Id: Ic39e08986c9377800ce58a1cb5b8401c6b71cf96 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/459706 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
This commit is contained in:
parent
4a3ad8371c
commit
975e48ae8a
@ -211,29 +211,31 @@ iscsi_init_grp_add_netmask(struct spdk_iscsi_init_grp *ig, char *mask)
|
||||
{
|
||||
struct spdk_iscsi_initiator_netmask *imask;
|
||||
char *p;
|
||||
size_t len;
|
||||
|
||||
if (ig->nnetmasks >= MAX_NETMASK) {
|
||||
SPDK_ERRLOG("> MAX_NETMASK(=%d) is not allowed\n", MAX_NETMASK);
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
len = strlen(mask);
|
||||
if (len > MAX_INITIATOR_ADDR) {
|
||||
SPDK_ERRLOG("Initiator Name is larger than %d bytes\n", MAX_INITIATOR_ADDR);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
imask = iscsi_init_grp_find_netmask(ig, mask);
|
||||
if (imask != NULL) {
|
||||
return -EEXIST;
|
||||
}
|
||||
|
||||
imask = malloc(sizeof(*imask));
|
||||
imask = calloc(1, sizeof(*imask));
|
||||
if (imask == NULL) {
|
||||
SPDK_ERRLOG("malloc() failed for inititator mask str\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
imask->mask = strdup(mask);
|
||||
if (imask->mask == NULL) {
|
||||
SPDK_ERRLOG("strdup() failed for initiator mask\n");
|
||||
free(imask);
|
||||
return -ENOMEM;
|
||||
}
|
||||
memcpy(imask->mask, mask, len);
|
||||
|
||||
/* Replace "ALL" by "ANY" if set */
|
||||
p = strstr(imask->mask, "ALL");
|
||||
@ -262,7 +264,6 @@ iscsi_init_grp_delete_netmask(struct spdk_iscsi_init_grp *ig, char *mask)
|
||||
|
||||
TAILQ_REMOVE(&ig->netmask_head, imask, tailq);
|
||||
ig->nnetmasks--;
|
||||
free(imask->mask);
|
||||
free(imask);
|
||||
return 0;
|
||||
}
|
||||
@ -296,7 +297,6 @@ iscsi_init_grp_delete_all_netmasks(struct spdk_iscsi_init_grp *ig)
|
||||
TAILQ_FOREACH_SAFE(imask, &ig->netmask_head, tailq, tmp) {
|
||||
TAILQ_REMOVE(&ig->netmask_head, imask, tailq);
|
||||
ig->nnetmasks--;
|
||||
free(imask->mask);
|
||||
free(imask);
|
||||
}
|
||||
}
|
||||
|
@ -37,6 +37,7 @@
|
||||
|
||||
#include "spdk/conf.h"
|
||||
#include "iscsi/iscsi.h"
|
||||
#include "iscsi/conn.h"
|
||||
|
||||
struct spdk_iscsi_initiator_name {
|
||||
char name[MAX_INITIATOR_NAME + 1];
|
||||
@ -44,7 +45,7 @@ struct spdk_iscsi_initiator_name {
|
||||
};
|
||||
|
||||
struct spdk_iscsi_initiator_netmask {
|
||||
char *mask;
|
||||
char mask[MAX_INITIATOR_ADDR + 1];
|
||||
TAILQ_ENTRY(spdk_iscsi_initiator_netmask) tailq;
|
||||
};
|
||||
|
||||
|
@ -370,7 +370,7 @@ node_access_allowed(void)
|
||||
TAILQ_INSERT_TAIL(&ig.initiator_head, &iname, tailq);
|
||||
|
||||
ig.nnetmasks = 1;
|
||||
imask.mask = "192.168.2.0/24";
|
||||
snprintf(imask.mask, sizeof(imask.mask), "192.168.2.0/24");
|
||||
TAILQ_INIT(&ig.netmask_head);
|
||||
TAILQ_INSERT_TAIL(&ig.netmask_head, &imask, tailq);
|
||||
|
||||
@ -483,7 +483,7 @@ node_access_multi_initiator_groups_cases(void)
|
||||
struct spdk_iscsi_portal portal;
|
||||
struct spdk_iscsi_init_grp ig1, ig2;
|
||||
struct spdk_iscsi_initiator_name iname1 = {}, iname2 = {};
|
||||
struct spdk_iscsi_initiator_netmask imask1, imask2;
|
||||
struct spdk_iscsi_initiator_netmask imask1 = {}, imask2 = {};
|
||||
struct spdk_scsi_dev scsi_dev;
|
||||
struct spdk_iscsi_pg_map *pg_map;
|
||||
char *iqn, *addr;
|
||||
@ -508,7 +508,6 @@ node_access_multi_initiator_groups_cases(void)
|
||||
TAILQ_INSERT_TAIL(&ig1.initiator_head, &iname1, tailq);
|
||||
|
||||
ig1.nnetmasks = 1;
|
||||
imask1.mask = NULL;
|
||||
TAILQ_INSERT_TAIL(&ig1.netmask_head, &imask1, tailq);
|
||||
|
||||
memset(&ig2, 0, sizeof(struct spdk_iscsi_init_grp));
|
||||
@ -520,7 +519,6 @@ node_access_multi_initiator_groups_cases(void)
|
||||
TAILQ_INSERT_TAIL(&ig2.initiator_head, &iname2, tailq);
|
||||
|
||||
ig2.nnetmasks = 1;
|
||||
imask2.mask = NULL;
|
||||
TAILQ_INSERT_TAIL(&ig2.netmask_head, &imask2, tailq);
|
||||
|
||||
/* portal group initialization */
|
||||
@ -572,7 +570,7 @@ node_access_multi_initiator_groups_cases(void)
|
||||
* +-------------------------------------------+---------+
|
||||
*/
|
||||
snprintf(iname1.name, sizeof(iname1.name), IQN1);
|
||||
imask1.mask = IP1;
|
||||
snprintf(imask1.mask, sizeof(imask1.mask), IP1);
|
||||
|
||||
result = spdk_iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
|
||||
CU_ASSERT(result == true);
|
||||
@ -589,7 +587,7 @@ node_access_multi_initiator_groups_cases(void)
|
||||
* +-------------------------------------------+---------+
|
||||
*/
|
||||
snprintf(iname1.name, sizeof(iname1.name), IQN1);
|
||||
imask1.mask = IP2;
|
||||
snprintf(imask1.mask, sizeof(imask1.mask), IP2);
|
||||
snprintf(iname2.name, sizeof(iname2.name), NO_IQN1);
|
||||
|
||||
result = spdk_iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
|
||||
@ -607,9 +605,9 @@ node_access_multi_initiator_groups_cases(void)
|
||||
* +-------------------------------------------+---------+
|
||||
*/
|
||||
snprintf(iname1.name, sizeof(iname1.name), IQN1);
|
||||
imask1.mask = IP2;
|
||||
snprintf(imask1.mask, sizeof(imask1.mask), IP2);
|
||||
snprintf(iname2.name, sizeof(iname2.name), IQN1);
|
||||
imask2.mask = IP1;
|
||||
snprintf(imask2.mask, sizeof(imask2.mask), IP1);
|
||||
|
||||
result = spdk_iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
|
||||
CU_ASSERT(result == true);
|
||||
@ -626,9 +624,9 @@ node_access_multi_initiator_groups_cases(void)
|
||||
* +---------------------------------------------+---------+
|
||||
*/
|
||||
snprintf(iname1.name, sizeof(iname1.name), IQN1);
|
||||
imask1.mask = IP2;
|
||||
snprintf(imask1.mask, sizeof(imask1.mask), IP2);
|
||||
snprintf(iname2.name, sizeof(iname2.name), IQN1);
|
||||
imask2.mask = IP2;
|
||||
snprintf(imask2.mask, sizeof(imask2.mask), IP2);
|
||||
|
||||
result = spdk_iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
|
||||
CU_ASSERT(result == false);
|
||||
@ -645,7 +643,7 @@ node_access_multi_initiator_groups_cases(void)
|
||||
* +---------------------------------------------+---------+
|
||||
*/
|
||||
snprintf(iname1.name, sizeof(iname1.name), IQN1);
|
||||
imask1.mask = IP2;
|
||||
snprintf(imask1.mask, sizeof(imask1.mask), IP2);
|
||||
snprintf(iname2.name, sizeof(iname2.name), IQN2);
|
||||
|
||||
result = spdk_iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
|
||||
@ -681,7 +679,7 @@ node_access_multi_initiator_groups_cases(void)
|
||||
*/
|
||||
snprintf(iname1.name, sizeof(iname1.name), IQN2);
|
||||
snprintf(iname2.name, sizeof(iname2.name), IQN1);
|
||||
imask2.mask = IP1;
|
||||
snprintf(imask2.mask, sizeof(imask2.mask), IP1);
|
||||
|
||||
result = spdk_iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
|
||||
CU_ASSERT(result == true);
|
||||
@ -699,7 +697,7 @@ node_access_multi_initiator_groups_cases(void)
|
||||
*/
|
||||
snprintf(iname1.name, sizeof(iname1.name), IQN2);
|
||||
snprintf(iname2.name, sizeof(iname2.name), IQN1);
|
||||
imask2.mask = IP2;
|
||||
snprintf(imask2.mask, sizeof(imask2.mask), IP2);
|
||||
|
||||
result = spdk_iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
|
||||
CU_ASSERT(result == false);
|
||||
|
Loading…
Reference in New Issue
Block a user