adamwill / rpms / openscap

Forked from rpms/openscap 3 years ago
Clone
Blob Blame History Raw
From 538c70780b49a36a4d2420ef93b87b78817dc14c Mon Sep 17 00:00:00 2001
From: Evgeny Kolesnikov <ekolesni@redhat.com>
Date: Mon, 26 Oct 2020 08:31:53 +0100
Subject: [PATCH] Covscan fixes

---
 src/OVAL/probes/fsdev.c                             | 2 +-
 src/OVAL/probes/independent/yamlfilecontent_probe.c | 5 +++--
 src/OVAL/probes/unix/fileextendedattribute_probe.c  | 2 +-
 src/OVAL/probes/unix/linux/partition_probe.c        | 2 +-
 src/OVAL/probes/unix/xinetd_probe.c                 | 7 ++++++-
 src/XCCDF/xccdf_session.c                           | 4 ++--
 utils/oscap-tool.c                                  | 6 +++++-
 utils/oscap-xccdf.c                                 | 3 +--
 8 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/src/OVAL/probes/fsdev.c b/src/OVAL/probes/fsdev.c
index b2b984441..c82ab620b 100644
--- a/src/OVAL/probes/fsdev.c
+++ b/src/OVAL/probes/fsdev.c
@@ -219,7 +219,7 @@ static fsdev_t *__fsdev_init(fsdev_t *lfs)
 	endmntent(fp);
 
 	void *new_ids = realloc(lfs->ids, sizeof(dev_t) * i);
-	if (new_ids == NULL) {
+	if (new_ids == NULL && i > 0) {
 		e = errno;
 		free(lfs->ids);
 		free(lfs);
diff --git a/src/OVAL/probes/independent/yamlfilecontent_probe.c b/src/OVAL/probes/independent/yamlfilecontent_probe.c
index 6f18abf83..e7e6cb3f5 100644
--- a/src/OVAL/probes/independent/yamlfilecontent_probe.c
+++ b/src/OVAL/probes/independent/yamlfilecontent_probe.c
@@ -216,12 +216,13 @@ static int yaml_path_query(const char *filepath, const char *yaml_path_cstr, str
 			result_error("YAML parser error: %s", parser.problem);
 			goto cleanup;
 		}
+
+		event_type = event.type;
+
 		if (yaml_path_filter_event(yaml_path, &parser, &event) == YAML_PATH_FILTER_RESULT_OUT) {
 			goto next;
 		}
 
-		event_type = event.type;
-
 		if (sequence) {
 			if (event_type == YAML_SEQUENCE_END_EVENT) {
 				sequence = false;
diff --git a/src/OVAL/probes/unix/fileextendedattribute_probe.c b/src/OVAL/probes/unix/fileextendedattribute_probe.c
index b442ea540..ee853886a 100644
--- a/src/OVAL/probes/unix/fileextendedattribute_probe.c
+++ b/src/OVAL/probes/unix/fileextendedattribute_probe.c
@@ -298,7 +298,7 @@ static int file_cb(const char *prefix, const char *p, const char *f, void *ptr,
 
 				// Allocate buffer, '+1' is for trailing '\0'
 				void *new_xattr_val = realloc(xattr_val, sizeof(char) * (xattr_vallen + 1));
-				if (xattr_val == NULL) {
+				if (new_xattr_val == NULL) {
 					dE("Failed to allocate memory for xattr_val");
 					free(xattr_val);
 					goto exit;
diff --git a/src/OVAL/probes/unix/linux/partition_probe.c b/src/OVAL/probes/unix/linux/partition_probe.c
index a74c0323a..adb244b04 100644
--- a/src/OVAL/probes/unix/linux/partition_probe.c
+++ b/src/OVAL/probes/unix/linux/partition_probe.c
@@ -207,7 +207,7 @@ static int collect_item(probe_ctx *ctx, oval_schema_version_t over, struct mnten
             mnt_ocnt = add_mnt_opt(&mnt_opts, mnt_ocnt, "move");
         }
 
-        dD("mnt_ocnt = %d, mnt_opts[mnt_ocnt]=%p", mnt_ocnt, mnt_opts[mnt_ocnt]);
+        dD("mnt_ocnt = %d, mnt_opts[mnt_ocnt]=%p", mnt_ocnt, mnt_opts == NULL ? NULL : mnt_opts[mnt_ocnt]);
 
 	/*
 	 * "Correct" the type (this won't be (hopefully) needed in a later version
diff --git a/src/OVAL/probes/unix/xinetd_probe.c b/src/OVAL/probes/unix/xinetd_probe.c
index 75b12f95b..d61c7d547 100644
--- a/src/OVAL/probes/unix/xinetd_probe.c
+++ b/src/OVAL/probes/unix/xinetd_probe.c
@@ -566,7 +566,12 @@ static int xiconf_add_cfile(xiconf_t *xiconf, const char *path, int depth)
 	}
 
 	xifile->depth = depth;
-	xiconf->cfile = realloc(xiconf->cfile, sizeof(xiconf_file_t *) * ++xiconf->count);
+	void *cfile = realloc(xiconf->cfile, sizeof(xiconf_file_t *) * ++xiconf->count);
+	if (cfile == NULL) {
+		dE("Failed re-allocate memory for cfile");
+		return (-1);
+	}
+	xiconf->cfile = cfile;
 	xiconf->cfile[xiconf->count - 1] = xifile;
 
 	dD("Added new file to the cfile queue: %s; fi=%zu", path, xiconf->count - 1);
diff --git a/src/XCCDF/xccdf_session.c b/src/XCCDF/xccdf_session.c
index 8bd394e2f..f1b837959 100644
--- a/src/XCCDF/xccdf_session.c
+++ b/src/XCCDF/xccdf_session.c
@@ -286,9 +286,9 @@ static struct oscap_source *xccdf_session_extract_arf_source(struct xccdf_sessio
 			}
 			struct tm *tm_mtime = malloc(sizeof(struct tm));
 #ifdef OS_WINDOWS
-			tm_mtime = localtime_s(tm_mtime, &file_stat.st_mtime);
+			localtime_s(tm_mtime, &file_stat.st_mtime);
 #else
-			tm_mtime = localtime_r(&file_stat.st_mtime, tm_mtime);
+			localtime_r(&file_stat.st_mtime, tm_mtime);
 #endif
 			strftime(tailoring_doc_timestamp, max_timestamp_len,
 					"%Y-%m-%dT%H:%M:%S", tm_mtime);
diff --git a/utils/oscap-tool.c b/utils/oscap-tool.c
index 9bfe52697..660a19047 100644
--- a/utils/oscap-tool.c
+++ b/utils/oscap-tool.c
@@ -315,7 +315,10 @@ static void getopt_parse_env(struct oscap_module *module, int *argc, char ***arg
 	opt = oscap_strtok_r(opts, delim, &state);
 	while (opt != NULL) {
 		eargc++;
-		eargv = realloc(eargv, eargc * sizeof(char *));
+		void *new_eargv = realloc(eargv, eargc * sizeof(char *));
+		if (new_eargv == NULL)
+			goto exit;
+		eargv = new_eargv;
 		eargv[eargc - 1] = strdup(opt);
 		opt = oscap_strtok_r(NULL, delim, &state);
 	}
@@ -334,6 +337,7 @@ static void getopt_parse_env(struct oscap_module *module, int *argc, char ***arg
 
 	*argc = nargc;
 	*argv = nargv;
+exit:
 	free(opts);
 	free(eargv);
 }
diff --git a/utils/oscap-xccdf.c b/utils/oscap-xccdf.c
index af337b844..0a9ae5270 100644
--- a/utils/oscap-xccdf.c
+++ b/utils/oscap-xccdf.c
@@ -610,8 +610,7 @@ int app_evaluate_xccdf(const struct oscap_action *action)
 
 	/* syslog message */
 #if defined(HAVE_SYSLOG_H)
-	syslog(priority, "Evaluation finished. Return code: %d, Base score %f.", evaluation_result,
-		session == NULL ? 0 : xccdf_session_get_base_score(session));
+	syslog(priority, "Evaluation finished. Return code: %d, Base score %f.", evaluation_result, xccdf_session_get_base_score(session));
 #endif
 
 	xccdf_session_set_xccdf_export(session, action->f_results);