Decompressors: check for read errors in unlzma.c
authorLasse Collin <lasse.collin@tukaani.org>
Fri, 11 Nov 2011 13:32:57 +0000 (14:32 +0100)
committerLasse Collin <lasse.collin@tukaani.org>
Fri, 11 Nov 2011 13:32:57 +0000 (14:32 +0100)
commitf4b38c6cd882bbc88c6a39a4f5d0fb81818fe107
tree45c9de6121350df5f6f1e4b2647ac19e566e772e
parent9bc32f2d7dc05e3d6e8dc96e30858ea565730f8e
Decompressors: check for read errors in unlzma.c

From: Lasse Collin <lasse.collin@tukaani.org>

Return value of rc->fill() is checked in rc_read() and error() is called
when needed, but then the code continues as if nothing had happened.

rc_read() is a void function and it's on the top of performance critical
call stacks, so propagating the error code via return values doesn't sound
like the best fix.  It seems better to check rc->buffer_size (which holds
the return value of rc->fill()) in the main loop.  It does nothing bad
that the code runs a little with unknown data after a failed rc->fill().

This fixes an infinite loop in initramfs decompression if the
LZMA-compressed initramfs image is corrupt.

Signed-off-by: Lasse Collin <lasse.collin@tukaani.org>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Keir Fraser <keir@xen.org>
Committed-by: Jan Beulich <jbeulich@suse.com>
xen/common/unlzma.c