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

iscsi: Use not malloc'ed but fixed size string for target name and alias



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

Maximum size of target name is already defined to be MAX_TARGET_NAME,
and hence use fixed size string whose size is MAX_TARGET_NAME + 1 for
spdk_iscsi_tgt_node::name.

Change psdk_iscsi_tgt_node::alias together.

This change will reduce the potential malloc failure.

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


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 975e48ae
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1703,7 +1703,7 @@ iscsi_op_login_set_target_info(struct spdk_iscsi_conn *conn,
	/* declarative parameters */
	if (target != NULL) {
		pthread_mutex_lock(&target->mutex);
		if (target->alias != NULL) {
		if (target->alias[0] != '\0') {
			snprintf(buf, sizeof buf, "%s", target->alias);
		} else {
			snprintf(buf, sizeof buf, "%s", "");
+6 −19
Original line number Diff line number Diff line
@@ -638,9 +638,6 @@ _iscsi_tgt_node_destruct(void *cb_arg, int rc)
		return;
	}

	free(target->name);
	free(target->alias);

	pthread_mutex_lock(&g_spdk_iscsi.mutex);
	iscsi_tgt_node_delete_all_pg_maps(target);
	pthread_mutex_unlock(&g_spdk_iscsi.mutex);
@@ -962,14 +959,12 @@ spdk_iscsi_tgt_node_construct(int target_index,
		return NULL;
	}

	target = malloc(sizeof(*target));
	target = calloc(1, sizeof(*target));
	if (!target) {
		SPDK_ERRLOG("could not allocate target\n");
		return NULL;
	}

	memset(target, 0, sizeof(*target));

	rc = pthread_mutex_init(&target->mutex, NULL);
	if (rc != 0) {
		SPDK_ERRLOG("tgt_node%d: mutex_init() failed\n", target->num);
@@ -979,22 +974,14 @@ spdk_iscsi_tgt_node_construct(int target_index,

	target->num = target_index;

	target->name = strdup(fullname);
	if (!target->name) {
		SPDK_ERRLOG("Could not allocate TargetName\n");
		iscsi_tgt_node_destruct(target, NULL, NULL);
		return NULL;
	}
	memcpy(target->name, fullname, strlen(fullname));

	if (alias == NULL) {
		target->alias = NULL;
	} else {
		target->alias = strdup(alias);
		if (!target->alias) {
			SPDK_ERRLOG("Could not allocate TargetAlias\n");
	if (alias != NULL) {
		if (strlen(alias) > MAX_TARGET_NAME) {
			iscsi_tgt_node_destruct(target, NULL, NULL);
			return NULL;
		}
		memcpy(target->alias, alias, strlen(alias));
	}

	target->dev = spdk_scsi_dev_construct(fullname, bdev_name_list, lun_id_list, num_luns,
@@ -1546,7 +1533,7 @@ iscsi_tgt_node_info_json(struct spdk_iscsi_tgt_node *target,

	spdk_json_write_named_string(w, "name", target->name);

	if (target->alias) {
	if (target->alias[0] != '\0') {
		spdk_json_write_named_string(w, "alias_name", target->alias);
	}

+4 −2
Original line number Diff line number Diff line
@@ -37,6 +37,8 @@

#include "spdk/stdinc.h"

#include "iscsi/iscsi.h"

struct spdk_iscsi_conn;
struct spdk_iscsi_init_grp;
struct spdk_iscsi_portal_grp;
@@ -62,8 +64,8 @@ struct spdk_iscsi_pg_map {

struct spdk_iscsi_tgt_node {
	int num;
	char *name;
	char *alias;
	char name[MAX_TARGET_NAME + 1];
	char alias[MAX_TARGET_NAME + 1];

	pthread_mutex_t mutex;

+3 −3
Original line number Diff line number Diff line
@@ -376,7 +376,7 @@ node_access_allowed(void)

	/* target initialization */
	memset(&tgtnode, 0, sizeof(struct spdk_iscsi_tgt_node));
	tgtnode.name = "iqn.2017-10.spdk.io:0001";
	snprintf(tgtnode.name, sizeof(tgtnode.name), "iqn.2017-10.spdk.io:0001");
	TAILQ_INIT(&tgtnode.pg_map_head);

	memset(&scsi_dev, 0, sizeof(struct spdk_scsi_dev));
@@ -438,7 +438,7 @@ node_access_denied_by_empty_netmask(void)

	/* target initialization */
	memset(&tgtnode, 0, sizeof(struct spdk_iscsi_tgt_node));
	tgtnode.name = "iqn.2017-10.spdk.io:0001";
	snprintf(tgtnode.name, sizeof(tgtnode.name), "iqn.2017-10.spdk.io:0001");
	TAILQ_INIT(&tgtnode.pg_map_head);

	memset(&scsi_dev, 0, sizeof(struct spdk_scsi_dev));
@@ -491,7 +491,7 @@ node_access_multi_initiator_groups_cases(void)

	/* target initialization */
	memset(&tgtnode, 0, sizeof(struct spdk_iscsi_tgt_node));
	tgtnode.name = IQN1;
	snprintf(tgtnode.name, sizeof(tgtnode.name), IQN1);
	TAILQ_INIT(&tgtnode.pg_map_head);

	memset(&scsi_dev, 0, sizeof(struct spdk_scsi_dev));