Commit b485342bd79af363c77ef1a421c4a0aef2de9812

Authored by Daniel Borkmann
Committed by Richard Weinberger
1 parent f911d73105

x86, um: actually mark system call tables readonly

Commit a074335a370e ("x86, um: Mark system call tables readonly") was
supposed to mark the sys_call_table in UML as RO by adding the const,
but it doesn't have the desired effect as it's nevertheless being placed
into the data section since __cacheline_aligned enforces sys_call_table
being placed into .data..cacheline_aligned instead. We need to use
the ____cacheline_aligned version instead to fix this issue.

Before:

$ nm -v arch/x86/um/sys_call_table_64.o | grep -1 "sys_call_table"
                 U sys_writev
0000000000000000 D sys_call_table
0000000000000000 D syscall_table_size

After:

$ nm -v arch/x86/um/sys_call_table_64.o | grep -1 "sys_call_table"
                 U sys_writev
0000000000000000 R sys_call_table
0000000000000000 D syscall_table_size

Fixes: a074335a370e ("x86, um: Mark system call tables readonly")
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
Signed-off-by: Richard Weinberger <richard@nod.at>

Showing 2 changed files with 2 additions and 2 deletions Side-by-side Diff

arch/x86/um/sys_call_table_32.c
... ... @@ -34,7 +34,7 @@
34 34  
35 35 extern asmlinkage void sys_ni_syscall(void);
36 36  
37   -const sys_call_ptr_t sys_call_table[] __cacheline_aligned = {
  37 +const sys_call_ptr_t sys_call_table[] ____cacheline_aligned = {
38 38 /*
39 39 * Smells like a compiler bug -- it doesn't work
40 40 * when the & below is removed.
arch/x86/um/sys_call_table_64.c
... ... @@ -47,7 +47,7 @@
47 47  
48 48 extern void sys_ni_syscall(void);
49 49  
50   -const sys_call_ptr_t sys_call_table[] __cacheline_aligned = {
  50 +const sys_call_ptr_t sys_call_table[] ____cacheline_aligned = {
51 51 /*
52 52 * Smells like a compiler bug -- it doesn't work
53 53 * when the & below is removed.