Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[PATCH 1/1] lz4: fix system halt at boot kernel on x86_64

48 views
Skip to first unread message

Caleb Jorden

unread,
May 4, 2015, 12:00:06 AM5/4/15
to
Sometimes, on x86_64, decompression fails with the following
error:

Decompressing Linux...

Decoding failed

-- System halted

This condition is not needed for a 64bit kernel(from commit d5e7caf):

if( ... ||
(op + COPYLENGTH) > oend)
goto _output_error

macro LZ4_SECURE_COPY() tests op and does not copy any data
when op exceeds the value.

added by analogy to lz4_uncompress_unknownoutputsize(...)

Signed-off-by: Krzysztof Kolasa <kko...@winsoft.pl>
Tested-by: Alexander Kuleshov <kulesh...@gmail.com>
Tested-by: Caleb Jorden <cjo...@gmail.com>
---
lib/lz4/lz4_decompress.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/lib/lz4/lz4_decompress.c b/lib/lz4/lz4_decompress.c
index f0f5c5c..8a742b1 100644
--- a/lib/lz4/lz4_decompress.c
+++ b/lib/lz4/lz4_decompress.c
@@ -139,8 +139,12 @@ static int lz4_uncompress(const char *source, char *dest, int osize)
/* Error: request to write beyond destination buffer */
if (cpy > oend)
goto _output_error;
+#if LZ4_ARCH64
+ if ((ref + COPYLENGTH) > oend)
+#else
if ((ref + COPYLENGTH) > oend ||
(op + COPYLENGTH) > oend)
+#endif
goto _output_error;
LZ4_SECURECOPY(ref, op, (oend - COPYLENGTH));
while (op < cpy)
@@ -270,7 +274,13 @@ static int lz4_uncompress_unknownoutputsize(const char *source, char *dest,
if (cpy > oend - COPYLENGTH) {
if (cpy > oend)
goto _output_error; /* write outside of buf */
-
+#if LZ4_ARCH64
+ if ((ref + COPYLENGTH) > oend)
+#else
+ if ((ref + COPYLENGTH) > oend ||
+ (op + COPYLENGTH) > oend)
+#endif
+ goto _output_error;
LZ4_SECURECOPY(ref, op, (oend - COPYLENGTH));
while (op < cpy)
*op++ = *ref++;
--
2.4.0

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majo...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

Caleb Jorden

unread,
May 4, 2015, 12:00:06 AM5/4/15
to
I just upgraded one of my systems from 4.0.0 to 4.0.1, and
discovered that it would no longer boot. I tried recompiling
my kernel, to see if I had somehow corrupted it, but I got the
same results. After searching google for a bit, I discovered
the discussion here:

Re: [PATCHv2] lz4: fix system halted at boot kernel x86_64 compressed lz4
https://lkml.org/lkml/2015/4/3/453

I tested booting 4.0.1 with gzip compression, and it booted
fine. I tested after applying this patch, and it also booted
fine.

It appears that this patch was never properly submitted to Greg,
so this is my pass at trying to have it properly formatted for
him. This applies cleanly to 4.0.1. I also tried to clean
up the wording a bit for the patch.

Please CC me on any response, as I am not yet subscribed to
this list.

Caleb Jorden (1):
lz4: fix system halted at boot kernel on x86_64

lib/lz4/lz4_decompress.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)

0 new messages