Commit 8f64724e authored by Shuhei Matsumoto's avatar Shuhei Matsumoto Committed by Darek Stojaczyk
Browse files

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: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: Iceeae94e250ea426f72ff72355a213606308da51
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/459708


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarDarek Stojaczyk <dariusz.stojaczyk@intel.com>
parent d1961b5e
Loading
Loading
Loading
Loading
+6 −9
Original line number Diff line number Diff line
@@ -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);
+3 −1
Original line number Diff line number Diff line
@@ -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;
+3 −3
Original line number Diff line number Diff line
@@ -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 */