lkml.org 
[lkml]   [2015]   [Jan]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/6] a bug that relocation can not be handled when kernel is loaded above 2G
    Date
    When process 32 bit relocation a local variable extended is defined
    to calculate the physical address of relocs entry. However its data
    type is int which is enough for i386, but not for x86_64. That's why
    relocation can only be handled when kernel is loaded below 2G,
    otherwise a overflow will happen and cause system hang.

    Here change it to long as 32 bit inverse relocation processing does,
    and this change is safe for i386 relocation handling.

    Signed-off-by: Baoquan He <bhe@redhat.com>
    ---
    arch/x86/boot/compressed/misc.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c
    index dcc1c53..324ccb5 100644
    --- a/arch/x86/boot/compressed/misc.c
    +++ b/arch/x86/boot/compressed/misc.c
    @@ -278,7 +278,7 @@ static void handle_relocations(void *output, unsigned long output_len)
    * So we work backwards from the end of the decompressed image.
    */
    for (reloc = output + output_len - sizeof(*reloc); *reloc; reloc--) {
    - int extended = *reloc;
    + long extended = *reloc;
    extended += map;

    ptr = (unsigned long)extended;
    --
    1.9.3


    \
     
     \ /
      Last update: 2015-01-21 04:41    [W:7.328 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site