• Lasse Collin's avatar
    Decompressors: check for read errors in decompress_unlzma.c · 278208d9
    Lasse Collin authored
    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: default avatarLasse Collin <lasse.collin@tukaani.org>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Alain Knaff <alain@knaff.lu>
    Cc: Albin Tonnerre <albin.tonnerre@free-electrons.com>
    Cc: Phillip Lougher <phillip@lougher.demon.co.uk>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    278208d9
decompress_unlzma.c 15.5 KB