[U-Boot] [PATCH 4/6] fdt: boot_get_fdt: unify 'fdt_len' validation (non-functional)

Eugeniu Rosca roscaeugeniu at gmail.com
Sun Mar 31 02:08:36 UTC 2019


Currently, there are two helpers called to determine the length of
FDT blobs embedded in the U-Boot-supported images:
 - image_multi_getimg(.., &fdt_len)
 - android_image_get_second(.., &fdt_len)

The returned 'fdt_len' value must match 'fdt_totalsize(fdt_blob)'.
Reduce the duplicated code by uniying the two checks.

No functional change is expected except that the error message
'fdt size != image size' will appear as a more generic
'fdt size mismatch!' to cover both use-cases.

Signed-off-by: Eugeniu Rosca <erosca at de.adit-jv.com>
---
 common/image-fdt.c | 18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/common/image-fdt.c b/common/image-fdt.c
index 68bcab85baf4..250f99aaaedd 100644
--- a/common/image-fdt.c
+++ b/common/image-fdt.c
@@ -270,6 +270,7 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch,
 #endif
 	ulong		img_addr;
 	ulong		fdt_addr;
+	ulong		fdt_len = 0;
 	char		*fdt_blob = NULL;
 	void		*buf;
 #if CONFIG_IS_ENABLED(FIT)
@@ -428,7 +429,7 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch,
 	} else if (images->legacy_hdr_valid &&
 			image_check_type(&images->legacy_hdr_os_copy,
 					 IH_TYPE_MULTI)) {
-		ulong fdt_data, fdt_len;
+		ulong fdt_data;
 
 		/*
 		 * Now check if we have a legacy multi-component image,
@@ -447,11 +448,6 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch,
 				fdt_error("image is not a fdt");
 				goto error;
 			}
-
-			if (fdt_totalsize(fdt_blob) != fdt_len) {
-				fdt_error("fdt size != image size");
-				goto error;
-			}
 		} else {
 			debug("## No Flattened Device Tree\n");
 			goto no_fdt;
@@ -459,7 +455,7 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch,
 #ifdef CONFIG_ANDROID_BOOT_IMAGE
 	} else if (genimg_get_format(buf) == IMAGE_FORMAT_ANDROID) {
 		struct andr_img_hdr *hdr = buf;
-		ulong fdt_data, fdt_len;
+		ulong fdt_data;
 
 		if (android_image_get_second(hdr, &fdt_data, &fdt_len) != 0)
 			goto no_fdt;
@@ -468,9 +464,6 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch,
 		if (fdt_check_header(fdt_blob) != 0)
 			goto no_fdt;
 
-		if (fdt_totalsize(fdt_blob) != fdt_len)
-			goto error;
-
 		debug("## Using FDT found in Android image second area\n");
 #endif
 	} else {
@@ -478,6 +471,11 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch,
 		goto no_fdt;
 	}
 
+	if (fdt_totalsize(fdt_blob) != fdt_len) {
+		fdt_error("fdt size mismatch!");
+		goto error;
+	}
+
 	*of_flat_tree = fdt_blob;
 	*of_size = fdt_totalsize(fdt_blob);
 	debug("   of_flat_tree at 0x%08lx size 0x%08lx\n",
-- 
2.21.0



More information about the U-Boot mailing list