2010-11-23 19:57:27

by Lasse Collin

[permalink] [raw]
Subject: [PATCH 1/3] Decompressors: Check for write errors in decompress_unlzo.c

From: Lasse Collin <[email protected]>

The return value of flush() is not checked in unlzo().
This means that the decompressor won't stop even if the
caller doesn't want more data. This can happen e.g. with
a corrupt LZO-compressed initramfs image.

Signed-off-by: Lasse Collin <[email protected]>
---

--- linux-2.6.37-rc3/lib/decompress_unlzo.c.orig 2010-10-20 23:30:22.000000000 +0300
+++ linux-2.6.37-rc3/lib/decompress_unlzo.c 2010-11-23 12:57:46.000000000 +0200
@@ -190,8 +190,8 @@ STATIC inline int INIT unlzo(u8 *input,
}
}

- if (flush)
- flush(out_buf, dst_len);
+ if (flush && flush(out_buf, dst_len) != dst_len)
+ goto exit_2;
if (output)
out_buf += dst_len;
if (posp)