
Hi Lukasz,
On 02/12/2014 04:56 PM, Lukasz Majewski wrote:
Hi Hector,
The calloc() call was allocating space for the sizeof the struct pointer rather than for the struct contents.
Signed-off-by: Hector Palacios hector.palacios@digi.com
disk/part_efi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/disk/part_efi.c b/disk/part_efi.c index 5dfaf490c89a..7fabec059d7a 100644 --- a/disk/part_efi.c +++ b/disk/part_efi.c @@ -232,7 +232,7 @@ 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));
- p_mbr = calloc(1, sizeof(legacy_mbr));
Thanks for spotting the error. _Damn_
However, this is not enough.
Since this buffer is passed to mmc for writing (and some targets may use cache) the legacy_mbr shall be defined as:
ALLOC_CACHE_ALIGN_BUFFER(legacy_mbr, p_mbr, sizeof(legacy_mbr)); memset(p_mbr, 0, sizeof(legacy_mbr));
Unfortunately this is causing unaligned access in my i.MX6. I'm specifically passing the -mno-unaligned-access when building this file so I guess it has to do with the macro and the packed structure.
Would you like to prepare v2 of this patch or shall I prepare the fix?
if (p_mbr == NULL) { printf("%s: calloc failed!\n", __func__); return -1;