From 6ec4ca75c237117d2512b4b6675c53640274cbfa Mon Sep 17 00:00:00 2001 From: Hector Palacios Date: Thu, 13 Feb 2014 09:48:24 +0100 Subject: [PATCH] part_efi: fix protective mbr struct allocation 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 Tested-by: Lukasz Majewski --- disk/part_efi.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/disk/part_efi.c b/disk/part_efi.c index 19c00b082..30b43c6e7 100644 --- a/disk/part_efi.c +++ b/disk/part_efi.c @@ -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; } -- 2.34.1