• David Brown's avatar
    ARM/vdso: Mark the vDSO code read-only after init · 11bf9b86
    David Brown authored
    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 class on ARM as well by putting the vDSO
    code page in post-init read-only memory as well.
    
    Before:
    	vdso: 1 text pages at base 80927000
    	root@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@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: default avatarDavid Brown <david.brown@linaro.org>
    Signed-off-by: default avatarKees Cook <keescook@chromium.org>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Brad Spengler <spender@grsecurity.net>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: Emese Revfy <re.emese@gmail.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Mathias Krause <minipli@googlemail.com>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Nathan Lynch <nathan_lynch@mentor.com>
    Cc: PaX Team <pageexec@freemail.hu>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Russell King <linux@arm.linux.org.uk>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: kernel-hardening@lists.openwall.com
    Cc: linux-arch <linux-arch@vger.kernel.org>
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: linux-kernel@vger.kernel.org
    Link: http://lkml.kernel.org/r/1455748879-21872-8-git-send-email-keescook@chromium.orgSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    11bf9b86
vdso.S 972 Bytes