lkml.org 
[lkml]   [2015]   [Jul]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 05/42] x86, kaslr: rename output_size to output_run_size
    Date
    Now we are using output_size as parameter, actually we are passing
    max(output_len, run_size).

    Change it to output_run_size to make it less confusing.

    Cc: Kees Cook <keescook@chromium.org>
    Signed-off-by: Yinghai Lu <yinghai@kernel.org>
    ---
    arch/x86/boot/compressed/aslr.c | 10 +++++-----
    arch/x86/boot/compressed/misc.c | 6 ++++--
    arch/x86/boot/compressed/misc.h | 4 ++--
    3 files changed, 11 insertions(+), 9 deletions(-)

    diff --git a/arch/x86/boot/compressed/aslr.c b/arch/x86/boot/compressed/aslr.c
    index 71520c4..0e1dac0 100644
    --- a/arch/x86/boot/compressed/aslr.c
    +++ b/arch/x86/boot/compressed/aslr.c
    @@ -135,7 +135,7 @@ static bool mem_overlaps(struct mem_vector *one, struct mem_vector *two)
    }

    static void mem_avoid_init(unsigned long input, unsigned long input_size,
    - unsigned long output, unsigned long output_size)
    + unsigned long output, unsigned long output_run_size)
    {
    u64 initrd_start, initrd_size;
    u64 cmd_line, cmd_line_size;
    @@ -146,7 +146,7 @@ static void mem_avoid_init(unsigned long input, unsigned long input_size,
    * Avoid the region that is unsafe to overlap during
    * decompression (see calculations at top of misc.c).
    */
    - unsafe_len = (output_size >> 12) + 32768 + 18;
    + unsafe_len = (output_run_size >> 12) + 32768 + 18;
    unsafe = (unsigned long)input + input_size - unsafe_len;
    mem_avoid[0].start = unsafe;
    mem_avoid[0].size = unsafe_len;
    @@ -298,7 +298,7 @@ static unsigned long find_random_addr(unsigned long minimum,
    unsigned char *choose_kernel_location(unsigned char *input,
    unsigned long input_size,
    unsigned char *output,
    - unsigned long output_size)
    + unsigned long output_run_size)
    {
    unsigned long choice = (unsigned long)output;
    unsigned long random;
    @@ -319,10 +319,10 @@ unsigned char *choose_kernel_location(unsigned char *input,

    /* Record the various known unsafe memory ranges. */
    mem_avoid_init((unsigned long)input, input_size,
    - (unsigned long)output, output_size);
    + (unsigned long)output, output_run_size);

    /* Walk e820 and find a random address. */
    - random = find_random_addr(choice, output_size);
    + random = find_random_addr(choice, output_run_size);
    if (!random) {
    debug_putstr("KASLR could not find suitable E820 region...\n");
    goto out;
    diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c
    index 96201aa..1c03098 100644
    --- a/arch/x86/boot/compressed/misc.c
    +++ b/arch/x86/boot/compressed/misc.c
    @@ -375,6 +375,7 @@ asmlinkage __visible void *decompress_kernel(void *rmode, memptr heap,
    {
    unsigned long run_size = VO__end - VO__text;
    unsigned char *output_orig = output;
    + unsigned long output_run_size;

    real_mode = rmode;

    @@ -400,14 +401,15 @@ asmlinkage __visible void *decompress_kernel(void *rmode, memptr heap,
    free_mem_ptr = heap; /* Heap */
    free_mem_end_ptr = heap + BOOT_HEAP_SIZE;

    + output_run_size = output_len > run_size ? output_len : run_size;
    +
    /*
    * The memory hole needed for the kernel is the larger of either
    * the entire decompressed kernel plus relocation table, or the
    * entire decompressed kernel plus .bss and .brk sections.
    */
    output = choose_kernel_location(input_data, input_len, output,
    - output_len > run_size ? output_len
    - : run_size);
    + output_run_size);

    /* Validate memory location choices. */
    if ((unsigned long)output & (MIN_KERNEL_ALIGN - 1))
    diff --git a/arch/x86/boot/compressed/misc.h b/arch/x86/boot/compressed/misc.h
    index 8c96cc5..40b4546 100644
    --- a/arch/x86/boot/compressed/misc.h
    +++ b/arch/x86/boot/compressed/misc.h
    @@ -59,7 +59,7 @@ int cmdline_find_option_bool(const char *option);
    unsigned char *choose_kernel_location(unsigned char *input,
    unsigned long input_size,
    unsigned char *output,
    - unsigned long output_size);
    + unsigned long output_run_size);
    /* cpuflags.c */
    bool has_cpuflag(int flag);
    #else
    @@ -67,7 +67,7 @@ static inline
    unsigned char *choose_kernel_location(unsigned char *input,
    unsigned long input_size,
    unsigned char *output,
    - unsigned long output_size)
    + unsigned long output_run_size)
    {
    return output;
    }
    --
    1.8.4.5


    \
     
     \ /
      Last update: 2015-07-07 22:41    [W:4.266 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site