public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/6] randomize kernel physical address and virtual address separately
@ 2015-01-21  3:37 Baoquan He
  2015-01-21  3:37 ` [PATCH 1/6] remove a unused function parameter Baoquan He
                   ` (8 more replies)
  0 siblings, 9 replies; 16+ messages in thread
From: Baoquan He @ 2015-01-21  3:37 UTC (permalink / raw)
  To: linux-kernel; +Cc: hpa, tglx, mingo, x86, keescook, vgoyal, whissi, Baoquan He

Currently kaslr only randomize physical address of kernel loading, then add the delta
to virtual address of kernel text mapping. Because kernel virtual address can only be
from __START_KERNEL_map to LOAD_PHYSICAL_ADDR+CONFIG_RANDOMIZE_BASE_MAX_OFFSET, namely
[0xffffffff80000000, 0xffffffffc0000000], so physical address can only be randomized
in region [LOAD_PHYSICAL_ADDR, CONFIG_RANDOMIZE_BASE_MAX_OFFSET], namely [16M, 1G].

So hpa and Vivek suggested the randomization should be done separately for both physical
and virtual address. In this patchset I tried it. And after randomization, relocation
handling only depends on virtual address changing, means I only check whether virtual
address is randomized to other position, if yes relocation need be handled, if no just
skip the relocation handling though physical address is randomized to different place.
Now physical address can be randomized from 16M to 4G, virtual address offset can be
from 16M to 1G.

Leftover problem:
    hpa want to see the physical randomization can cover the whole physical memory. I
checked code and found it's hard to do. Because in arch/x86/boot/compressed/head_64.S
an identity mapping of 4G is built and then kaslr and decompressing are done. The #PF
handler solution which he suggested is only available after jump into decompressed
kernel, namely in arch/x86/kernel/head_64.S. I didn't think of a way to do the whole
memory covering for physical address randomization, any suggestion or idea?

Baoquan He (6):
  remove a unused function parameter
  a bug that relocation can not be handled when kernel is loaded above
    2G
  Introduce a function to randomize the kernel text mapping address
  adapt choose_kernel_location to add the kernel virtual address
    randomzation
  change the relocations behavior for kaslr on x86_64
  extend the upper limit of kernel physical address randomization to 4G

 arch/x86/boot/compressed/aslr.c | 69 ++++++++++++++++++++++++++++-------------
 arch/x86/boot/compressed/misc.c | 34 +++++++++++++-------
 arch/x86/boot/compressed/misc.h | 20 ++++++------
 3 files changed, 82 insertions(+), 41 deletions(-)

-- 
1.9.3


^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2015-02-03 15:30 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-01-21  3:37 [PATCH 0/6] randomize kernel physical address and virtual address separately Baoquan He
2015-01-21  3:37 ` [PATCH 1/6] remove a unused function parameter Baoquan He
2015-01-21  3:37 ` [PATCH 2/6] a bug that relocation can not be handled when kernel is loaded above 2G Baoquan He
2015-01-21  3:37 ` [PATCH 3/6] Introduce a function to randomize the kernel text mapping address Baoquan He
2015-01-21  3:37 ` [PATCH 4/6] adapt choose_kernel_location to add the kernel virtual address randomzation Baoquan He
2015-01-21  3:37 ` [PATCH 5/6] change the relocations behavior for kaslr on x86_64 Baoquan He
2015-01-21  3:37 ` [PATCH 6/6] extend the upper limit of kernel physical address randomization to 4G Baoquan He
2015-01-21  4:19 ` [PATCH 0/6] randomize kernel physical address and virtual address separately Andy Lutomirski
2015-01-21  4:46   ` Baoquan He
2015-02-01  8:10   ` Baoquan He
2015-02-01 13:13     ` Andy Lutomirski
2015-02-02  9:34       ` Baoquan He
2015-02-02 12:10       ` Baoquan He
2015-01-21  6:18 ` Kees Cook
2015-02-02 16:42 ` H. Peter Anvin
2015-02-03 15:30   ` Baoquan He

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox