[coreboot-gerrit] Patch set updated for coreboot: commonlib/lz4_wrapper: Use correct casts to ensure valid calculations

Paul Menzel (paulepanter@users.sourceforge.net) gerrit at coreboot.org
Tue Feb 23 19:23:44 CET 2016


Paul Menzel (paulepanter at users.sourceforge.net) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/13771

-gerrit

commit 1b746b2b79d1ddd30060401777ec9ded2bb224c3
Author: Paul Menzel <paulepanter at users.sourceforge.net>
Date:   Tue Feb 23 18:59:04 2016 +0100

    commonlib/lz4_wrapper: Use correct casts to ensure valid calculations
    
    Commit 09f2921b (cbfs: Add LZ4 in-place decompression support for
    pre-RAM stages) breaks building cbfstool with gcc (Debian 4.9.2-10)
    4.9.2 in Debian 8.3 (jessie) with a 32-bit user space. It works fine
    in a 64-bit user space.
    
    ```
    /home/joey/src/coreboot/src/commonlib/lz4_wrapper.c:164:18: note: in expansion of macro 'MIN'
        size_t size = MIN((uint32_t)b.size, dst + dstn - out);
                      ^
    /home/joey/src/coreboot/src/commonlib/include/commonlib/helpers.h:29:35: error: signed and unsigned type in conditional expression [-Werror=sign-compare]
     #define MIN(a,b) ((a) < (b) ? (a) : (b))
                                       ^
    ```
    
    The problem is arithmetic on void*, so explicitly cast to the wanted
    types as suggested by user *redi* in #gcc at irc.freenode.net.
    
    Change-Id: I85bee25a69c432ef8bb934add7fd2e2e31f03662
    Signed-off-by: Paul Menzel <paulepanter at users.sourceforge.net>
---
 src/commonlib/lz4_wrapper.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/commonlib/lz4_wrapper.c b/src/commonlib/lz4_wrapper.c
index ea7b90d..1a765af 100644
--- a/src/commonlib/lz4_wrapper.c
+++ b/src/commonlib/lz4_wrapper.c
@@ -161,7 +161,7 @@ size_t ulz4fn(const void *src, size_t srcn, void *dst, size_t dstn)
 		}
 
 		if (b.not_compressed) {
-			size_t size = MIN((uint32_t)b.size, dst + dstn - out);
+			size_t size = MIN((uintptr_t)b.size, (uintptr_t)dst + dstn - (uintptr_t)out);
 			memcpy(out, in, size);
 			if (size < b.size)
 				break;		/* output overrun */



More information about the coreboot-gerrit mailing list