From: Arjan van de Ven Mark some key kernel datastructures readonly. This patch was previously posted on Jun 28th but was back then not merged because nothing was enforcing rodata anyway.. well that changed now :) Patch by Christoph Lameter and Dave Jones Signed-off-by: Arjan van de Ven Signed-off-by: Ingo Molnar Cc: Andi Kleen Signed-off-by: Andrew Morton --- arch/i386/kernel/entry.S | 1 + arch/i386/kernel/syscall_table.S | 1 - arch/x86_64/ia32/ia32entry.S | 2 +- arch/x86_64/kernel/syscall.c | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) diff -puN arch/i386/kernel/entry.S~mark-rodata-section-read-only-make-some-datastructures-const arch/i386/kernel/entry.S --- devel/arch/i386/kernel/entry.S~mark-rodata-section-read-only-make-some-datastructures-const 2005-11-10 02:19:46.000000000 -0800 +++ devel-akpm/arch/i386/kernel/entry.S 2005-11-10 02:19:46.000000000 -0800 @@ -657,6 +657,7 @@ ENTRY(spurious_interrupt_bug) pushl $do_spurious_interrupt_bug jmp error_code +.section .rodata,"a" #include "syscall_table.S" syscall_table_size=(.-sys_call_table) diff -puN arch/i386/kernel/syscall_table.S~mark-rodata-section-read-only-make-some-datastructures-const arch/i386/kernel/syscall_table.S --- devel/arch/i386/kernel/syscall_table.S~mark-rodata-section-read-only-make-some-datastructures-const 2005-11-10 02:19:46.000000000 -0800 +++ devel-akpm/arch/i386/kernel/syscall_table.S 2005-11-10 02:19:46.000000000 -0800 @@ -1,4 +1,3 @@ -.data ENTRY(sys_call_table) .long sys_restart_syscall /* 0 - old "setup()" system call, used for restarting */ .long sys_exit diff -puN arch/x86_64/ia32/ia32entry.S~mark-rodata-section-read-only-make-some-datastructures-const arch/x86_64/ia32/ia32entry.S --- devel/arch/x86_64/ia32/ia32entry.S~mark-rodata-section-read-only-make-some-datastructures-const 2005-11-10 02:19:46.000000000 -0800 +++ devel-akpm/arch/x86_64/ia32/ia32entry.S 2005-11-10 02:19:46.000000000 -0800 @@ -341,7 +341,7 @@ ENTRY(ia32_ptregs_common) jmp ia32_sysret /* misbalances the return cache */ CFI_ENDPROC - .data + .section .rodata,"a" .align 8 .globl ia32_sys_call_table ia32_sys_call_table: diff -puN arch/x86_64/kernel/syscall.c~mark-rodata-section-read-only-make-some-datastructures-const arch/x86_64/kernel/syscall.c --- devel/arch/x86_64/kernel/syscall.c~mark-rodata-section-read-only-make-some-datastructures-const 2005-11-10 02:19:46.000000000 -0800 +++ devel-akpm/arch/x86_64/kernel/syscall.c 2005-11-10 02:19:46.000000000 -0800 @@ -19,7 +19,7 @@ typedef void (*sys_call_ptr_t)(void); extern void sys_ni_syscall(void); -sys_call_ptr_t sys_call_table[__NR_syscall_max+1] __cacheline_aligned = { +const sys_call_ptr_t sys_call_table[__NR_syscall_max+1] = { /* Smells like a like a compiler bug -- it doesn't work when the & below is removed. */ [0 ... __NR_syscall_max] = &sys_ni_syscall, #include _