[PATCH] lib: fwts_args: ensure a null short_option is never passed to getopt_long

Colin King colin.king at canonical.com
Thu Nov 9 12:30:40 UTC 2017


From: Colin Ian King <colin.king at canonical.com>

Although very unlikely, ensure a null getopt_long is never passed to a call
to getopt_long as this would lead to a null pointer derference.  Also add
a fix to a leak on short_options if an allocation fails.

Detected by CoverityScan, CID#1381432 ("Explicit Null dereference")

Signed-off-by: Colin Ian King <colin.king at canonical.com>
---
 src/lib/src/fwts_args.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/src/lib/src/fwts_args.c b/src/lib/src/fwts_args.c
index 23eb0c83..d4b1a3c1 100644
--- a/src/lib/src/fwts_args.c
+++ b/src/lib/src/fwts_args.c
@@ -154,6 +154,7 @@ int fwts_args_parse(fwts_framework *fw, const int argc, char * const argv[])
 				} else {
 					short_options = calloc(1, len + 1);
 					if (short_options == NULL) {
+						free(short_options);
 						free(long_options);
 						fwts_log_error(fw,
 							"Out of memory "
@@ -167,6 +168,22 @@ int fwts_args_parse(fwts_framework *fw, const int argc, char * const argv[])
 		}
 	}
 
+	/*
+	 *  Although unlikely, short_options must not be null otherwise
+	 *  it could potentially break getopt_long() so to be totally
+	 *  safe, allocate a empty string.
+	 *  Cleans up CoverityScan CID#1381432 ("Explicit Null dereference")
+	 */
+	if (!short_options) {
+		short_options = strdup("");
+		if (!short_options) {
+			free(short_options);
+			free(long_options);
+			fwts_log_error(fw, "Out of memory allocating options.");
+			return FWTS_ERROR;
+		}
+	}
+
 	for (;;) {
 		master_option_index = total_options;
 		translated_long_option_index = 0;
-- 
2.14.1




More information about the fwts-devel mailing list