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: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: Ie1fcdbd45ce000a9c1c53761195697555b8d030a
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/459709
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:47:10 +09:00 committed by Darek Stojaczyk
parent 8f64724e86
commit f341e69a50
3 changed files with 7 additions and 12 deletions

View File

@ -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);

View File

@ -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;

View File

@ -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));