linux/arch/parisc/include/asm
Kees Cook c74ba8b348 arch: Introduce post-init read-only memory
One of the easiest ways to protect the kernel from attack is to reduce
the internal attack surface exposed when a "write" flaw is available. By
making as much of the kernel read-only as possible, we reduce the
attack surface.

Many things are written to only during __init, and never changed
again. These cannot be made "const" since the compiler will do the wrong
thing (we do actually need to write to them). Instead, move these items
into a memory region that will be made read-only during mark_rodata_ro()
which happens after all kernel __init code has finished.

This introduces __ro_after_init as a way to mark such memory, and adds
some documentation about the existing __read_mostly marking.

This improves the security of the Linux kernel by marking formerly
read-write memory regions as read-only on a fully booted up system.

Based on work by PaX Team and Brad Spengler.

Signed-off-by: Kees 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: David Brown <david.brown@linaro.org>
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: PaX Team <pageexec@freemail.hu>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: kernel-hardening@lists.openwall.com
Cc: linux-arch <linux-arch@vger.kernel.org>
Link: http://lkml.kernel.org/r/1455748879-21872-5-git-send-email-keescook@chromium.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2016-02-22 08:51:38 +01:00
..
agp.h
asm-offsets.h
asmregs.h
assembly.h parisc: provide macro to create exception table entries 2013-11-07 22:25:33 +01:00
atomic.h atomic, arch: Audit atomic_{read,set}() 2015-09-23 09:54:28 +02:00
bitops.h arch,parisc: Convert smp_mb__*() 2014-04-18 14:20:41 +02:00
bug.h [PARISC] fix missing TAINT_WARN problem 2012-06-05 14:10:17 +09:00
bugs.h
cache.h arch: Introduce post-init read-only memory 2016-02-22 08:51:38 +01:00
cacheflush.h asm-generic: Consolidate mark_rodata_ro() 2016-02-22 08:51:37 +01:00
checksum.h
cmpxchg.h arch: Remove __ARCH_HAVE_CMPXCHG 2015-05-13 10:55:42 +02:00
compat_ucontext.h
compat.h parisc: Fixes and cleanups in kernel uapi header files 2015-11-08 20:27:01 +01:00
current.h
delay.h parisc: make udelay() SMP-safe 2013-11-07 22:28:26 +01:00
dma-mapping.h dma-mapping: always provide the dma_map_ops based implementation 2016-01-20 17:09:18 -08:00
dma.h Disintegrate asm/system.h for PA-RISC 2012-03-28 18:30:02 +01:00
eisa_bus.h
eisa_eeprom.h Fix common misspellings 2011-03-31 11:26:23 -03:00
elf.h parisc,metag: Fix crashes due to stack randomization on stack-grows-upwards architectures 2015-05-12 22:03:44 +02:00
fb.h
fixmap.h
floppy.h parisc: remove IRQF_DISABLED 2013-02-20 22:50:26 +01:00
ftrace.h ftrace: Make CALLER_ADDRx macros more generic 2014-05-21 03:10:32 -04:00
futex.h [PARISC] futex: Use same lock set as lws calls 2012-02-27 09:35:08 -06:00
grfioctl.h
hardirq.h parisc: do not count IPI calls twice 2013-11-07 22:28:54 +01:00
hardware.h parisc: drop include of asm/pdc.h from asm/hardware.h 2012-05-10 15:12:08 -07:00
hugetlb.h parisc: Protect huge page pte changes with spinlocks 2016-01-16 19:19:14 +01:00
ide.h
io.h parisc: Define ioremap_uc and ioremap_wc 2015-09-08 15:30:37 +02:00
irq.h [PARISC] Convert to new irq_chip functions 2011-02-10 10:22:14 -06:00
irqflags.h
kbdleds.h keyboard: Use BIOS Keyboard variable to set Numlock 2012-05-08 14:19:41 -07:00
Kbuild mm: clean up per architecture MM hook header files 2015-07-17 16:39:53 -07:00
kmap_types.h
ldcw.h parisc: fix out-of-register compiler error in ldcw inline assembler function 2014-12-26 17:47:01 +01:00
led.h
linkage.h
machdep.h
mc146818rtc.h
mckinley.h
mmu_context.h atomic: use <linux/atomic.h> 2011-07-26 16:49:47 -07:00
mmu.h
mmzone.h parisc: fix kernel BUG at arch/parisc/include/asm/mmzone.h:50 (part 2) 2013-06-18 20:20:21 +02:00
module.h Make most arch asm/module.h files use asm-generic/module.h 2012-09-28 14:31:03 +09:30
page.h parisc: Add defines for Huge page support 2015-11-22 12:22:34 +01:00
parisc-device.h parisc: Fix interrupt routing for C8000 serial ports 2013-07-31 23:42:32 +02:00
parport.h ARCH: drivers remove __dev* attributes. 2013-01-03 15:57:13 -08:00
pci.h parisc: Initialize PCI bridge cache line and default latency 2016-01-12 22:03:21 +01:00
pdc_chassis.h
pdc.h parisc: Imporove debug info about space registers and TLB configuration 2016-01-12 22:12:09 +01:00
pdcpat.h
perf_event.h
perf.h
pgalloc.h parisc: Fix wrong comment regarding first pmd entry flags 2015-11-20 10:19:18 +01:00
pgtable.h parisc: Disable huge pages on Mako machines 2015-12-12 16:45:23 +01:00
prefetch.h [PARISC] fix panic on prefetch(NULL) on PA7300LC 2012-05-16 13:15:21 +01:00
processor.h parisc: Reduce overhead of parisc_requires_coherency() 2016-01-12 22:03:36 +01:00
psw.h Disintegrate asm/system.h for PA-RISC 2012-03-28 18:30:02 +01:00
ptrace.h parisc: add kernel audit feature 2013-11-07 22:27:20 +01:00
ropes.h
rt_sigframe.h
rtc.h
runway.h
sections.h
serial.h parisc: remove empty SERIAL_PORT_DFNS in serial.h 2013-11-30 21:02:18 +01:00
shmparam.h parisc: change value of SHMLBA from 0x00400000 to PAGE_SIZE 2014-04-13 15:00:53 +02:00
signal.h Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal 2013-02-23 18:50:11 -08:00
smp.h [PARISC] Fix parisc compile failure after smp: Add task_struct argument to __cpu_up() 2012-05-25 12:35:45 +01:00
socket.h parisc: break out SOCK_NONBLOCK define to own asm header file 2013-11-19 23:36:17 +01:00
special_insns.h parisc: optimize mtsp(0,sr) inline assembly 2013-07-09 22:09:21 +02:00
spinlock_types.h
spinlock.h parisc: locks: remove redundant arch_*_relax operations 2014-03-23 17:01:23 +01:00
string.h
superio.h
switch_to.h Disintegrate asm/system.h for PA-RISC 2012-03-28 18:30:02 +01:00
syscall.h ARCH: AUDIT: implement syscall_get_arch for all arches 2014-09-23 16:20:10 -04:00
termios.h UAPI: (Scripted) Disintegrate arch/parisc/include/asm 2012-10-16 21:28:05 +01:00
thread_info.h arch: Remove exec_domain from remaining archs 2015-04-12 21:03:30 +02:00
timex.h Disintegrate asm/system.h for PA-RISC 2012-03-28 18:30:02 +01:00
tlb.h
tlbflush.h parisc: Fix some PTE/TLB race conditions and optimize __flush_tlb_range based on timing results 2015-07-10 21:47:47 +02:00
traps.h parisc: mark parisc_terminate() noreturn and cold. 2013-10-13 17:44:49 +02:00
uaccess.h parisc: macro whitespace fixes 2015-02-17 10:39:14 +01:00
ucontext.h
unaligned.h
unistd.h sys_sgetmask/sys_ssetmask: add CONFIG_SGETMASK_SYSCALL 2014-06-04 16:54:14 -07:00
unwind.h