[PATCH 3/4] uefidump: add checking the resonable path list length for load option

Ivan Hu ivan.hu at canonical.com
Wed Apr 20 03:20:06 UTC 2016


Signed-off-by: Ivan Hu <ivan.hu at canonical.com>
---
 src/uefi/uefidump/uefidump.c | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/src/uefi/uefidump/uefidump.c b/src/uefi/uefidump/uefidump.c
index 43f70cf..6a3fcdb 100644
--- a/src/uefi/uefidump/uefidump.c
+++ b/src/uefi/uefidump/uefidump.c
@@ -807,7 +807,6 @@ static void uefidump_info_bootdev(fwts_framework *fw, fwts_uefi_var *var)
 {
 	fwts_uefi_load_option *load_option;
 	char tmp[2048];
-	char *path;
 	size_t len, offset;
 
 	if (var->datalen < sizeof(fwts_uefi_load_option))
@@ -820,15 +819,19 @@ static void uefidump_info_bootdev(fwts_framework *fw, fwts_uefi_var *var)
 	len = fwts_uefi_str16len(load_option->description);
 	fwts_log_info_verbatum(fw, "  Info: %s\n", tmp);
 
-	/* Skip over description to get to packed path, unpack path and print */
-	offset = sizeof(load_option->attributes) +
-		 sizeof(load_option->file_path_list_length) +
-		 (sizeof(uint16_t) * (len + 1));
+	if (load_option->file_path_list_length != 0) {
+		char *path;
 
-	path = uefidump_build_dev_path(NULL,
-			(fwts_uefi_dev_path *)(var->data + offset), var->datalen - offset);
-	fwts_log_info_verbatum(fw, "  Path: %s.", path);
-	free(path);
+		/* Skip over description to get to packed path, unpack path and print */
+		offset = sizeof(load_option->attributes) +
+			 sizeof(load_option->file_path_list_length) +
+			 (sizeof(uint16_t) * (len + 1));
+
+		path = uefidump_build_dev_path(NULL,
+				(fwts_uefi_dev_path *)(var->data + offset), var->datalen - offset);
+		fwts_log_info_verbatum(fw, "  Path: %s.", path);
+		free(path);
+	}
 
 	offset = sizeof(load_option->attributes) +
 		 sizeof(load_option->file_path_list_length) +
-- 
1.9.1




More information about the fwts-devel mailing list