part_efi: fix protective mbr struct allocation
authorHector Palacios <hector.palacios@digi.com>
Thu, 13 Feb 2014 08:48:24 +0000 (09:48 +0100)
committerTom Rini <trini@ti.com>
Mon, 24 Feb 2014 15:56:07 +0000 (10:56 -0500)
The calloc() call was allocating space for the sizeof the struct
pointer rather than for the struct contents.
Besides, since this buffer is passed to mmc for writing and some
platforms may use cache, the legacy_mbr struct should be cache-aligned.

Signed-off-by: Hector Palacios <hector.palacios@digi.com>
Tested-by: Lukasz Majewski <l.majewski@samsung.com>
disk/part_efi.c

index 9c33ae7a3174b37854ac5368628cf09e9e379bf0..733d5bde94ed416e0831d326a0e865c56edc02b8 100644 (file)
@@ -213,10 +213,10 @@ int test_part_efi(block_dev_desc_t * dev_desc)
  */
 static int set_protective_mbr(block_dev_desc_t *dev_desc)
 {
-       legacy_mbr *p_mbr;
-
        /* Setup the Protective MBR */
-       p_mbr = calloc(1, sizeof(p_mbr));
+       ALLOC_CACHE_ALIGN_BUFFER(legacy_mbr, p_mbr, 1);
+       memset(p_mbr, 0, sizeof(*p_mbr));
+
        if (p_mbr == NULL) {
                printf("%s: calloc failed!\n", __func__);
                return -1;
@@ -231,11 +231,9 @@ static int set_protective_mbr(block_dev_desc_t *dev_desc)
        if (dev_desc->block_write(dev_desc->dev, 0, 1, p_mbr) != 1) {
                printf("** Can't write to device %d **\n",
                        dev_desc->dev);
-               free(p_mbr);
                return -1;
        }
 
-       free(p_mbr);
        return 0;
 }