• Baoquan He's avatar
    x86/KASLR: Randomize virtual address separately · 8391c73c
    Baoquan He authored
    The current KASLR implementation randomizes the physical and virtual
    addresses of the kernel together (both are offset by the same amount). It
    calculates the delta of the physical address where vmlinux was linked
    to load and where it is finally loaded. If the delta is not equal to 0
    (i.e. the kernel was relocated), relocation handling needs be done.
    On 64-bit, this patch randomizes both the physical address where kernel
    is decompressed and the virtual address where kernel text is mapped and
    will execute from. We now have two values being chosen, so the function
    arguments are reorganized to pass by pointer so they can be directly
    updated. Since relocation handling only depends on the virtual address,
    we must check the virtual delta, not the physical delta for processing
    kernel relocations. This also populates the page table for the new
    virtual address range. 32-bit does not support a separate virtual address,
    so it continues to use the physical offset for its virtual offset.
    Additionally updates the sanity checks done on the resulting kernel
    addresses since they are potentially separate now.
    [kees: rewrote changelog, limited virtual split to 64-bit only, update checks]
    [kees: fix CONFIG_RANDOMIZE_BASE=n boot failure]
    Signed-off-by: default avatarBaoquan He <bhe@redhat.com>
    Signed-off-by: default avatarKees Cook <keescook@chromium.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: H.J. Lu <hjl.tools@gmail.com>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Yinghai Lu <yinghai@kernel.org>
    Link: http://lkml.kernel.org/r/1464216334-17200-4-git-send-email-keescook@chromium.org
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>