diff mbox

[U-Boot] lzma: fix buffer bound check error

Message ID 1388455021-4887-1-git-send-email-ant@area128.com
State Accepted
Delegated to: Tom Rini
Headers show

Commit Message

Antonios Vamporakis Dec. 31, 2013, 1:57 a.m. UTC
Variable uncompressedSize references the space available, while outSizeFull is
the actual expected uncompressed size. Using the wrong value causes LzmaDecode
to return SZ_ERROR_INPUT_EOF. Problem was introduced in commit afca294. While
at it add additional debug message.

Signed-off-by: Antonios Vamporakis <ant@area128.com>
CC: Kees Cook <keescook@chromium.org>
CC: Simon Glass <sjg@chromium.org>
CC: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
CC: Luka Perkov <luka@openwrt.org>
---
 lib/lzma/LzmaTools.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

Tom Rini Jan. 14, 2014, 9:02 p.m. UTC | #1
On Tue, Dec 31, 2013 at 02:57:01AM +0100, Antonios Vamporakis wrote:

> Variable uncompressedSize references the space available, while outSizeFull is
> the actual expected uncompressed size. Using the wrong value causes LzmaDecode
> to return SZ_ERROR_INPUT_EOF. Problem was introduced in commit afca294. While
> at it add additional debug message.
> 
> Signed-off-by: Antonios Vamporakis <ant@area128.com>
> CC: Kees Cook <keescook@chromium.org>
> CC: Simon Glass <sjg@chromium.org>
> CC: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
> CC: Luka Perkov <luka@openwrt.org>

Applied to u-boot/master, thanks!
diff mbox

Patch

diff --git a/lib/lzma/LzmaTools.c b/lib/lzma/LzmaTools.c
index 0aec2f9..90d31cd 100644
--- a/lib/lzma/LzmaTools.c
+++ b/lib/lzma/LzmaTools.c
@@ -102,7 +102,7 @@  int lzmaBuffToBuffDecompress (unsigned char *outStream, SizeT *uncompressedSize,
         return SZ_ERROR_OUTPUT_EOF;
 
     /* Decompress */
-    outProcessed = *uncompressedSize;
+    outProcessed = outSizeFull;
 
     WATCHDOG_RESET();
 
@@ -111,6 +111,9 @@  int lzmaBuffToBuffDecompress (unsigned char *outStream, SizeT *uncompressedSize,
         inStream + LZMA_DATA_OFFSET, &compressedSize,
         inStream, LZMA_PROPS_SIZE, LZMA_FINISH_END, &state, &g_Alloc);
     *uncompressedSize = outProcessed;
+
+    debug("LZMA: Uncompresed ................ 0x%zx\n", outProcessed);
+
     if (res != SZ_OK)  {
         return res;
     }