lkml.org 
[lkml]   [2016]   [Apr]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v5 02/21] x86, KASLR: Handle kernel relocation above 2G
    Date
    From: Baoquan He <bhe@redhat.com>

    When processing the relocation table, the offset used to calculate the
    relocation is an int. This is sufficient for calculating the physical
    address of the relocs entry on 32-bit systems and on 64-bit systems when
    the relocation is under 2G. To handle relocations above 2G (seen in
    situations like kexec, netboot, etc), this offset needs to be calculated
    using a long to avoid wrapping and miscalculating the relocation.

    Signed-off-by: Baoquan He <bhe@redhat.com>
    [kees: rewrote changelog]
    Signed-off-by: Kees Cook <keescook@chromium.org>
    ---
    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 f35ad9eb1bf1..c4477d5f3fff 100644
    --- a/arch/x86/boot/compressed/misc.c
    +++ b/arch/x86/boot/compressed/misc.c
    @@ -295,7 +295,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;
    --
    2.6.3
    \
     
     \ /
      Last update: 2016-04-15 00:41    [W:6.622 / U:0.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site