Commit f341e69a 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 porta number



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

Define maximum port number of portal to be 32 and use fixed size string
whose size is 33 for spdk_iscsi_portal_grp::port.

This change will reduce the potential malloc failure.

Signed-off-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: Ie1fcdbd45ce000a9c1c53761195697555b8d030a
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/459709


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 8f64724e
Loading
Loading
Loading
Loading
+2 −8
Original line number Diff line number Diff line
@@ -118,7 +118,7 @@ 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) {
	if (strlen(host) > MAX_PORTAL_ADDR || strlen(port) > MAX_PORTAL_PORT) {
		return NULL;
	}

@@ -143,11 +143,7 @@ spdk_iscsi_portal_create(const char *host, const char *port, const char *cpumask
		memcpy(p->host, host, strlen(host));
	}

	p->port = strdup(port);
	if (!p->port) {
		SPDK_ERRLOG("strdup() failed for host\n");
		goto error_out;
	}
	memcpy(p->port, port, strlen(port));

	core_mask = spdk_cpuset_alloc();
	if (!core_mask) {
@@ -191,7 +187,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);

	return NULL;
@@ -208,7 +203,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->port);
	spdk_cpuset_free(p->cpumask);
	free(p);

+2 −1
Original line number Diff line number Diff line
@@ -39,13 +39,14 @@
#include "spdk/cpuset.h"

#define MAX_PORTAL_ADDR	256
#define MAX_PORTAL_PORT	32

struct spdk_json_write_ctx;

struct spdk_iscsi_portal {
	struct spdk_iscsi_portal_grp	*group;
	char				host[MAX_PORTAL_ADDR + 1];
	char				*port;
	char				port[MAX_PORTAL_PORT + 1];
	struct spdk_sock		*sock;
	struct spdk_cpuset		*cpumask;
	struct spdk_poller		*acceptor_poller;
+3 −3
Original line number Diff line number Diff line
@@ -390,7 +390,7 @@ node_access_allowed(void)
	memset(&portal, 0, sizeof(struct spdk_iscsi_portal));
	portal.group = &pg;
	snprintf(portal.host, sizeof(portal.host), "192.168.2.0");
	portal.port = "3260";
	snprintf(portal.port, sizeof(portal.port), "3260");

	/* input for UT */
	memset(&conn, 0, sizeof(struct spdk_iscsi_conn));
@@ -452,7 +452,7 @@ node_access_denied_by_empty_netmask(void)
	memset(&portal, 0, sizeof(struct spdk_iscsi_portal));
	portal.group = &pg;
	snprintf(portal.host, sizeof(portal.host), "192.168.2.0");
	portal.port = "3260";
	snprintf(portal.port, sizeof(portal.port), "3260");

	/* input for UT */
	memset(&conn, 0, sizeof(struct spdk_iscsi_conn));
@@ -533,7 +533,7 @@ node_access_multi_initiator_groups_cases(void)
	memset(&portal, 0, sizeof(struct spdk_iscsi_portal));
	portal.group = &pg;
	snprintf(portal.host, sizeof(portal.host), IP1);
	portal.port = "3260";
	snprintf(portal.port, sizeof(portal.port), "3260");

	/* connection initialization */
	memset(&conn, 0, sizeof(struct spdk_iscsi_conn));