Hello Piotr,

On 05/31/2013 02:26 PM, Piotr Wilczek wrote:
-bmp_image_t *gunzip_bmp(unsigned long addr, unsigned long *lenp)
+bmp_image_t *gunzip_bmp(unsigned long addr, unsigned long *lenp,
+                       void **alloc_addr)
  {
        void *dst;
        unsigned long len;
@@ -60,7 +65,14 @@ bmp_image_t *gunzip_bmp(unsigned long addr, unsigned long 
*lenp)
                puts("Error: malloc in gunzip failed!\n");
                return NULL;
        }
-       if (gunzip(dst, CONFIG_SYS_VIDEO_LOGO_MAX_SIZE, (uchar *)addr, &len) != 
0) {
+
+       bmp = dst;
+
+       /* align to 32-bit-aligned-address + 2 */
+       if ((unsigned int)bmp % 0x04 != 0x02)
+               bmp = (bmp_image_t *)(((unsigned int)dst + 0x02) & ~0x01);

This is wrong. Suppose that bmp % 4 == 3, then (dst + 2) % 4 == 1,
and thus ((dst + 2) & ~1) % 4 == 0, which is not an aligned+2 address.

+
+       if (gunzip(bmp, CONFIG_SYS_VIDEO_LOGO_MAX_SIZE, (uchar *)addr, &len) != 
0) {
                free(dst);
                return NULL;
        }
@@ -68,8 +80,6 @@ bmp_image_t *gunzip_bmp(unsigned long addr, unsigned long 
*lenp)
                puts("Image could be truncated"
                                " (increase 
CONFIG_SYS_VIDEO_LOGO_MAX_SIZE)!\n");


--
Regards,
Nikita.
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to