[Accel-config] [PATCH] accel-config: Fix some clang scan-build warnings and bugs

Ramesh Thomas <ramesh.thomas at intel.com> Wed, 05 Oct 2022 11:11:21 -0700
Newsgroups dev.linux.lists.accel-config
Message-ID <[email protected]>
--===============4881701967434187342==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable

clang scan-build tool found some issues in static scan. Though they are
not impacting currently, they have the potential of causing bugs if not
careful. Cleaned up code in the reported areas.

Info about the clang scan-build tool is at
https://clang.llvm.org/get_started.html#build

Reported-by: Colin Ian King <colin.king(a)intel.com>
Signed-off-by: Ramesh Thomas <ramesh.thomas(a)intel.com>
---
 accfg/accel-config.c |  2 +-
 accfg/enable.c       | 40 ++++++++++++++++------------------------
 accfg/lib/libaccfg.c |  7 +++++++
 accfg/mdev.c         |  4 ++--
 test/dsa.c           |  7 ++++++-
 test/dsa_prep.c      |  1 -
 util/abspath.c       |  9 ++-------
 util/strbuf.c        |  3 ++-
 8 files changed, 36 insertions(+), 37 deletions(-)

diff --git a/accfg/accel-config.c b/accfg/accel-config.c
index 225ce02..d6aa198 100644
--- a/accfg/accel-config.c
+++ b/accfg/accel-config.c
@@ -40,7 +40,7 @@ static int cmd_help(int argc, const char **argv, void *ct=
x)
 		NULL
 	};
 =

-	argc =3D parse_options_subcommand(argc, argv, builtin_help_options,
+	parse_options_subcommand(argc, argv, builtin_help_options,
 					builtin_help_subcommands,
 					builtin_help_usage, 0);
 =

diff --git a/accfg/enable.c b/accfg/enable.c
index 973f0b8..c27fbff 100644
--- a/accfg/enable.c
+++ b/accfg/enable.c
@@ -90,22 +90,18 @@ static int device_action(int argc, const char **argv, c=
onst char *usage,
 		NULL
 	};
 	int i, rc =3D -EINVAL, success =3D 0;
-	const char *all =3D "all";
 	enum accfg_device_state state;
 =

 	argc =3D parse_options(argc, argv, options, u, 0);
 =

-	if (argc =3D=3D 0) {
-		argc =3D 1;
-		argv =3D &all;
-		usage_with_options(u, options);
-	} else {
-		for (i =3D 0; i < argc; i++) {
-			if (strcmp(argv[i], "all") =3D=3D 0) {
-				argv[0] =3D "all";
-				argc =3D 1;
-				break;
-			}
+	if (argc =3D=3D 0)
+		usage_with_options(u, options); /* exits app */
+
+	for (i =3D 0; i < argc; i++) {
+		if (strcmp(argv[i], "all") =3D=3D 0) {
+			argv[0] =3D "all";
+			argc =3D 1;
+			break;
 		}
 	}
 =

@@ -206,21 +202,17 @@ static int wq_action(int argc, const char **argv, con=
st char *usage,
 		NULL
 	};
 	int i, rc =3D -EINVAL, success =3D 0;
-	const char *all =3D "all";
 =

 	argc =3D parse_options(argc, argv, options, u, 0);
 =

-	if (argc =3D=3D 0) {
-		argc =3D 1;
-		argv =3D &all;
-		usage_with_options(u, options);
-	} else {
-		for (i =3D 0; i < argc; i++) {
-			if (strcmp(argv[i], "all") =3D=3D 0) {
-				argv[0] =3D "all";
-				argc =3D 1;
-				break;
-			}
+	if (argc =3D=3D 0)
+		usage_with_options(u, options); /* exits app */
+
+	for (i =3D 0; i < argc; i++) {
+		if (strcmp(argv[i], "all") =3D=3D 0) {
+			argv[0] =3D "all";
+			argc =3D 1;
+			break;
 		}
 	}
 =

diff --git a/accfg/lib/libaccfg.c b/accfg/lib/libaccfg.c
index 4bb5681..7aba58d 100644
--- a/accfg/lib/libaccfg.c
+++ b/accfg/lib/libaccfg.c
@@ -806,9 +806,11 @@ static void *add_wq(void *parent, int id, const char *=
wq_base,
 =

 	if (sscanf(basename(wq_base_string),
 				"wq%" SCNu64 ".%" SCNu64, &device_id, &wq_id) !=3D 2) {
+		free(wq_base_string);
 		close(dfd);
 		goto err_wq;
 	}
+	free(wq_base_string);
 =

 	wq->id =3D wq_id;
 	wq->group =3D group;
@@ -902,9 +904,12 @@ static void *add_group(void *parent, int id, const cha=
r *group_base,
 	}
 	if (sscanf(basename(group_base_string),
 				"group%" SCNu64 ".%" SCNu64, &device_id, &group_id) !=3D 2) {
+		free(group_base_string);
 		close(dfd);
 		goto err_group;
 	}
+	free(group_base_string);
+
 	group->group_path =3D (char *)group_base;
 	group->device =3D device;
 	device->group =3D group;
@@ -994,11 +999,13 @@ static void *add_engine(void *parent, int id, const c=
har *engine_base,
 	}
 	if (sscanf(basename(engine_base_string),
 			"engine%" SCNu64 ".%" SCNu64, &device_id, &engine_id) !=3D 2) {
+		free(engine_base_string);
 		close(dfd);
 		free(path);
 		free(engine);
 		return NULL;
 	}
+	free(engine_base_string);
 =

 	engine->id =3D engine_id;
 	engine->group =3D group;
diff --git a/accfg/mdev.c b/accfg/mdev.c
index b3e8d29..6bbf457 100644
--- a/accfg/mdev.c
+++ b/accfg/mdev.c
@@ -95,7 +95,7 @@ int cmd_create_mdev(int argc, const char **argv, void *ct=
x)
 		return 0;
 	}
 =

-	argc =3D parse_options(argc, argv, options, u, 0);
+	parse_options(argc, argv, options, u, 0);
 	if (opt_called)
 		return 0;
 =

@@ -148,7 +148,7 @@ int cmd_remove_mdev(int argc, const char **argv, void *=
ctx)
 		return 0;
 	}
 =

-	argc =3D parse_options(argc, argv, options, u, 0);
+	parse_options(argc, argv, options, u, 0);
 	if (opt_called)
 		return 0;
 =

diff --git a/test/dsa.c b/test/dsa.c
index fbba72d..77453b9 100644
--- a/test/dsa.c
+++ b/test/dsa.c
@@ -1468,6 +1468,8 @@ int task_result_verify(struct task *tsk, int mismatch=
_expected)
 		return rc;
 	case DSA_OPCODE_DIF_INS:
 		rc =3D task_result_verify_dif(tsk, tsk->xfer_size, mismatch_expected);
+		if (rc !=3D ACCTEST_STATUS_OK)
+			return rc;
 		rc =3D task_result_verify_dif_tags(tsk, tsk->xfer_size);
 		return rc;
 	case DSA_OPCODE_DIF_STRP:
@@ -1477,6 +1479,9 @@ int task_result_verify(struct task *tsk, int mismatch=
_expected)
 	case DSA_OPCODE_DIF_UPDT:
 		rc =3D task_result_verify_dif(tsk, tsk->xfer_size - 8 * tsk->blks,
 					    mismatch_expected);
+		if (rc !=3D ACCTEST_STATUS_OK)
+			return rc;
+
 		rc =3D task_result_verify_dif_tags(tsk, tsk->xfer_size - 8 * tsk->blks);
 		return rc;
 	}
@@ -1815,7 +1820,7 @@ static int task_result_verify_dif_page_fault(struct t=
ask *tsk, unsigned long xfe
 =

 int task_result_verify_dif(struct task *tsk, unsigned long xfer_size, int =
mismatch_expected)
 {
-	int rc;
+	int rc =3D 0;
 	unsigned long i;
 	unsigned long blks =3D tsk->blks;
 	unsigned long buf_size =3D dif_blk_arr[tsk->blk_idx_flg];
diff --git a/test/dsa_prep.c b/test/dsa_prep.c
index 3bccda3..d5e1ced 100644
--- a/test/dsa_prep.c
+++ b/test/dsa_prep.c
@@ -610,7 +610,6 @@ void dsa_reprep_dif(struct acctest_context *ctx, struct=
 task *tsk)
 		hw->dest_ref_tag_seed =3D compl->dif_upd_dest_ref_tag;
 	}
 	if (tsk->opcode =3D=3D DSA_OPCODE_DIF_CHECK) {
-		blks_completed =3D compl->bytes_completed / (dif_arr[tsk->blk_idx_flg] +=
 8);
 		hw->xfer_size -=3D compl->bytes_completed;
 		hw->chk_app_tag_seed =3D compl->dif_chk_app_tag;
 		hw->chk_ref_tag_seed =3D compl->dif_chk_ref_tag;
diff --git a/util/abspath.c b/util/abspath.c
index 09bbd27..daaec8a 100644
--- a/util/abspath.c
+++ b/util/abspath.c
@@ -7,14 +7,9 @@
 char *prefix_filename(const char *pfx, const char *arg)
 {
 	struct strbuf path =3D STRBUF_INIT;
-	size_t pfx_len =3D pfx ? strlen(pfx) : 0;
 =

-	if (!pfx_len)
-		;
-	else if (is_absolute_path(arg))
-		pfx_len =3D 0;
-	else
-		strbuf_add(&path, pfx, pfx_len);
+	if (pfx && !is_absolute_path(arg))
+		strbuf_add(&path, pfx, strlen(pfx));
 =

 	strbuf_addstr(&path, arg);
 	return strbuf_detach(&path, NULL);
diff --git a/util/strbuf.c b/util/strbuf.c
index eaa5bed..fd893fa 100644
--- a/util/strbuf.c
+++ b/util/strbuf.c
@@ -85,7 +85,8 @@ static void strbuf_splice(struct strbuf *sb, size_t pos, =
size_t len,
 	memmove(sb->buf + pos + dlen,
 			sb->buf + pos + len,
 			sb->len - pos - len);
-	memcpy(sb->buf + pos, data, dlen);
+	if (data)
+		memcpy(sb->buf + pos, data, dlen);
 	strbuf_setlen(sb, sb->len + dlen - len);
 }
 =

-- =

2.37.3

--===============4881701967434187342==--