[PATCH] fit_image: Use calloc() to fix reproducibility issue
authorFabio Estevam <festevam@gmail.com>
Tue, 28 Jul 2020 00:03:13 +0000 (21:03 -0300)
committerVagrant Cascadian <vagrant@debian.org>
Fri, 28 Aug 2020 23:35:40 +0000 (00:35 +0100)
From 7a66514f64dfb302dd9e763278d2d8a86b94a050 Mon Sep 17 00:00:00 2001
Origin: https://patchwork.ozlabs.org/project/uboot/patch/20200728000313.31130-1-festevam@gmail.com/

Vagrant Cascadian reported that mx6cuboxi target no longer builds
reproducibility on Debian.

One example of builds mismatches:

00096680: 696e 6700 736f 756e 642d 6461 6900 6465  ing.sound-dai.de
-00096690: 7465 6374 2d67 7069 6f73 0000            tect-gpios..
+00096690: 7465 6374 2d67 7069 6f73 0061            tect-gpios.a

This problem happens because all the buffers in fit_image.c are
allocated via malloc(), which does not zero out the allocated buffer.

Using calloc() fixes this unpredictable behaviour as it guarantees
that the allocated buffer are zero initialized.

Reported-by: Vagrant Cascadian <vagrant@reproducible-builds.org>
Suggested-by: Tom Rini <trini@konsulko.com>
Signed-off-by: Fabio Estevam <festevam@gmail.com>
Gbp-Pq: Topic reproducible
Gbp-Pq: Name 0001-fit_image-Use-calloc-to-fix-reproducibility-issue.patch

tools/fit_image.c

index a082d9386d200d095753eae45fec826b1a718269..0c6185d89277438d28f4f15ffbb9884c0594bc57 100644 (file)
@@ -388,7 +388,7 @@ static int fit_build(struct image_tool_params *params, const char *fname)
        size = fit_calc_size(params);
        if (size < 0)
                return -1;
-       buf = malloc(size);
+       buf = calloc(1, size);
        if (!buf) {
                fprintf(stderr, "%s: Out of memory (%d bytes)\n",
                        params->cmdname, size);
@@ -467,7 +467,7 @@ static int fit_extract_data(struct image_tool_params *params, const char *fname)
         * Allocate space to hold the image data we will extract,
         * extral space allocate for image alignment to prevent overflow.
         */
-       buf = malloc(fit_size + (align_size * image_number));
+       buf = calloc(1, fit_size + (align_size * image_number));
        if (!buf) {
                ret = -ENOMEM;
                goto err_munmap;
@@ -572,7 +572,7 @@ static int fit_import_data(struct image_tool_params *params, const char *fname)
 
        /* Allocate space to hold the new FIT */
        size = sbuf.st_size + 16384;
-       fdt = malloc(size);
+       fdt = calloc(1, size);
        if (!fdt) {
                fprintf(stderr, "%s: Failed to allocate memory (%d bytes)\n",
                        __func__, size);
@@ -673,7 +673,7 @@ static int copyfile(const char *src, const char *dst)
                goto out;
        }
 
-       buf = malloc(512);
+       buf = calloc(1, 512);
        if (!buf) {
                printf("Can't allocate buffer to copy file\n");
                goto out;