linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
  • * [PATCH] ARM: vdso: Mark vDSO code as read-only
           [not found] <1453226922-16831-1-git-send-email-keescook@chromium.org>
           [not found] ` <1453226922-16831-4-git-send-email-keescook@chromium.org>
    @ 2016-02-16 21:36 ` David Brown
      2016-02-16 21:52   ` Kees Cook
      1 sibling, 1 reply; 14+ messages in thread
    From: David Brown @ 2016-02-16 21:36 UTC (permalink / raw)
      To: linux-arm-kernel
    
    Although the arm vDSO is cleanly separated by code/data with the code
    being read-only in userspace mappings, the code page is still writable
    from the kernel.  There have been exploits (such as
    http://itszn.com/blog/?p=21) that take advantage of this on x86 to go
    from a bad kernel write to full root.
    
    Prevent this specific exploit on arm by putting the vDSO code page in
    post-init read-only memory as well.
    
    Before:
    vdso: 1 text pages at base 80927000
    root at Vexpress:/ cat /sys/kernel/debug/kernel_page_tables
    ---[ Modules ]---
    ---[ Kernel Mapping ]---
    0x80000000-0x80100000           1M     RW NX SHD
    0x80100000-0x80600000           5M     ro x  SHD
    0x80600000-0x80800000           2M     ro NX SHD
    0x80800000-0xbe000000         984M     RW NX SHD
    
    After:
    vdso: 1 text pages at base 8072b000
    root at Vexpress:/ cat /sys/kernel/debug/kernel_page_tables
    ---[ Modules ]---
    ---[ Kernel Mapping ]---
    0x80000000-0x80100000           1M     RW NX SHD
    0x80100000-0x80600000           5M     ro x  SHD
    0x80600000-0x80800000           2M     ro NX SHD
    0x80800000-0xbe000000         984M     RW NX SHD
    
    Inspired by https://lkml.org/lkml/2016/1/19/494 based on work by the
    PaX Team, Brad Spengler, and Kees Cook.
    
    Signed-off-by: David Brown <david.brown@linaro.org>
    ---
    This patch depends on Kees Cook's series
    https://lkml.org/lkml/2016/1/19/497 which adds the ro_after_init
    section.
    
     arch/arm/vdso/vdso.S | 3 +--
     1 file changed, 1 insertion(+), 2 deletions(-)
    
    diff --git a/arch/arm/vdso/vdso.S b/arch/arm/vdso/vdso.S
    index b2b97e3..a62a7b6 100644
    --- a/arch/arm/vdso/vdso.S
    +++ b/arch/arm/vdso/vdso.S
    @@ -23,9 +23,8 @@
     #include <linux/const.h>
     #include <asm/page.h>
     
    -	__PAGE_ALIGNED_DATA
    -
     	.globl vdso_start, vdso_end
    +	.section .data..ro_after_init
     	.balign PAGE_SIZE
     vdso_start:
     	.incbin "arch/arm/vdso/vdso.so"
    -- 
    2.7.1
    
    ^ permalink raw reply related	[flat|nested] 14+ messages in thread

  • end of thread, other threads:[~2016-02-18 10:46 UTC | newest]
    
    Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
    -- links below jump to the message on this page --
         [not found] <1453226922-16831-1-git-send-email-keescook@chromium.org>
         [not found] ` <1453226922-16831-4-git-send-email-keescook@chromium.org>
         [not found]   ` <20160127211105.GA41450@davidb.org>
         [not found]     ` <CAGXu5j+DLRoVE88a9++jVfEkN90HDiAaDAMnT2TrKqtMZ_yOww@mail.gmail.com>
    2016-01-28  0:09       ` [PATCH] arm64: make CONFIG_DEBUG_RODATA non-optional David Brown
    2016-01-28  0:14         ` Kees Cook
    2016-01-28  8:20           ` Ard Biesheuvel
    2016-01-28 11:06         ` Mark Rutland
    2016-01-28 14:06           ` Kees Cook
    2016-01-28 14:59             ` Mark Rutland
    2016-01-28 15:17               ` Kees Cook
    2016-02-16 21:36 ` [PATCH] ARM: vdso: Mark vDSO code as read-only David Brown
    2016-02-16 21:52   ` Kees Cook
    2016-02-17  5:20     ` David Brown
    2016-02-17 23:00       ` Kees Cook
    2016-02-17 23:43         ` David Brown
    2016-02-17 23:48           ` Kees Cook
    2016-02-18 10:46             ` PaX Team
    

    This is a public inbox, see mirroring instructions
    for how to clone and mirror all data and code used for this inbox;
    as well as URLs for NNTP newsgroup(s).