• Yinghai Lu's avatar
    x86/boot: Calculate decompression size during boot not build · d607251b
    Yinghai Lu authored
    Currently z_extract_offset is calculated in boot/compressed/mkpiggy.c.
    This doesn't work well because mkpiggy.c doesn't know the details of the
    decompressor in use. As a result, it can only make an estimation, which
    has risks:
    
     - output + output_len (VO) could be much bigger than input + input_len
       (ZO). In this case, the decompressed kernel plus relocs could overwrite
       the decompression code while it is running.
    
     - The head code of ZO could be bigger than z_extract_offset. In this case
       an overwrite could happen when the head code is running to move ZO to
       the end of buffer. Though currently the size of the head code is very
       small it's still a potential risk. Since there is no rule to limit the
       size of the head code of ZO, it runs the risk of suddenly becoming a
       (hard to find) bug.
    
    Instead, this moves the z_extract_offset calculation into header.S, and
    makes adjustments to be sure that the above two cases can never happen,
    and further corrects the comments describing the calculations.
    
    Since we have (in the previous patch) made ZO always be located against
    the end of decompression buffer, z_extract_offset is only used here to
    calculate an appropriate buffer size (INIT_SIZE), and is not longer used
    elsewhere. As such, it can be removed from voffset.h.
    
    Additionally clean up #if/#else #define to improve readability.
    Signed-off-by: default avatarYinghai Lu <yinghai@kernel.org>
    Signed-off-by: default avatarBaoquan He <bhe@redhat.com>
    [ Rewrote the changelog and comments. ]
    Signed-off-by: default avatarKees Cook <keescook@chromium.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Dave Young <dyoung@redhat.com>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Vivek Goyal <vgoyal@redhat.com>
    Cc: lasse.collin@tukaani.org
    Link: http://lkml.kernel.org/r/1461888548-32439-4-git-send-email-keescook@chromium.orgSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    d607251b
header.S 16.4 KB