From 8f9b54a35a70b604ebd2b2f2e7e04eabd0ff8a54 Mon Sep 17 00:00:00 2001 From: Lasse Collin Date: Wed, 12 Jan 2011 17:01:20 -0800 Subject: Decompressors: check for write errors in decompress_unlzo.c 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 Cc: "H. Peter Anvin" Cc: Alain Knaff Cc: Albin Tonnerre Cc: Phillip Lougher Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- lib/decompress_unlzo.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib/decompress_unlzo.c') diff --git a/lib/decompress_unlzo.c b/lib/decompress_unlzo.c index 6e56d547ba3..855d9d30ec4 100644 --- a/lib/decompress_unlzo.c +++ b/lib/decompress_unlzo.c @@ -187,8 +187,8 @@ STATIC inline int INIT unlzo(u8 *input, int in_len, } } - 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) -- cgit v1.2.3