iscsi: Use not malloc'ed but fixed size string for portal IP address

Using malloc'ed string for string in iSCSI target has caused
scan-build error.

Define maximum IP address of portal to be 256 and use fixed size string
whose size is 257 for spdk_iscsi_portal_grp::host.

This change will reduce the potential malloc failure.

Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: Iceeae94e250ea426f72ff72355a213606308da51
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/459708
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:
Shuhei Matsumoto 2019-06-28 10:36:31 +09:00 committed by Darek Stojaczyk
parent d1961b5e41
commit 8f64724e86
3 changed files with 12 additions and 13 deletions

View File

@ -118,6 +118,9 @@ spdk_iscsi_portal_create(const char *host, const char *port, const char *cpumask
assert(host != NULL);
assert(port != NULL);
if (strlen(host) > MAX_PORTAL_ADDR) {
return NULL;
}
p = calloc(1, sizeof(*p));
if (!p) {
@ -130,18 +133,14 @@ spdk_iscsi_portal_create(const char *host, const char *port, const char *cpumask
SPDK_WARNLOG("Please use \"[::]\" as IPv6 wildcard\n");
SPDK_WARNLOG("Convert \"[*]\" to \"[::]\" automatically\n");
SPDK_WARNLOG("(Use of \"[*]\" will be deprecated in a future release)");
p->host = strdup("[::]");
snprintf(p->host, sizeof(p->host), "[::]");
} else if (strcasecmp(host, "*") == 0) {
SPDK_WARNLOG("Please use \"0.0.0.0\" as IPv4 wildcard\n");
SPDK_WARNLOG("Convert \"*\" to \"0.0.0.0\" automatically\n");
SPDK_WARNLOG("(Use of \"[*]\" will be deprecated in a future release)");
p->host = strdup("0.0.0.0");
snprintf(p->host, sizeof(p->host), "0.0.0.0");
} else {
p->host = strdup(host);
}
if (!p->host) {
SPDK_ERRLOG("strdup() failed for host\n");
goto error_out;
memcpy(p->host, host, strlen(host));
}
p->port = strdup(port);
@ -193,7 +192,6 @@ spdk_iscsi_portal_create(const char *host, const char *port, const char *cpumask
error_out:
spdk_cpuset_free(core_mask);
free(p->port);
free(p->host);
free(p);
return NULL;
@ -210,7 +208,6 @@ spdk_iscsi_portal_destroy(struct spdk_iscsi_portal *p)
TAILQ_REMOVE(&g_spdk_iscsi.portal_head, p, g_tailq);
pthread_mutex_unlock(&g_spdk_iscsi.mutex);
free(p->host);
free(p->port);
spdk_cpuset_free(p->cpumask);
free(p);

View File

@ -38,11 +38,13 @@
#include "spdk/conf.h"
#include "spdk/cpuset.h"
#define MAX_PORTAL_ADDR 256
struct spdk_json_write_ctx;
struct spdk_iscsi_portal {
struct spdk_iscsi_portal_grp *group;
char *host;
char host[MAX_PORTAL_ADDR + 1];
char *port;
struct spdk_sock *sock;
struct spdk_cpuset *cpumask;

View File

@ -389,7 +389,7 @@ node_access_allowed(void)
/* portal initialization */
memset(&portal, 0, sizeof(struct spdk_iscsi_portal));
portal.group = &pg;
portal.host = "192.168.2.0";
snprintf(portal.host, sizeof(portal.host), "192.168.2.0");
portal.port = "3260";
/* input for UT */
@ -451,7 +451,7 @@ node_access_denied_by_empty_netmask(void)
/* portal initialization */
memset(&portal, 0, sizeof(struct spdk_iscsi_portal));
portal.group = &pg;
portal.host = "192.168.2.0";
snprintf(portal.host, sizeof(portal.host), "192.168.2.0");
portal.port = "3260";
/* input for UT */
@ -532,7 +532,7 @@ node_access_multi_initiator_groups_cases(void)
/* portal initialization */
memset(&portal, 0, sizeof(struct spdk_iscsi_portal));
portal.group = &pg;
portal.host = IP1;
snprintf(portal.host, sizeof(portal.host), IP1);
portal.port = "3260";
/* connection initialization */