aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Safonov <dsafonov@virtuozzo.com>2016-04-18 09:43:43 -0400
committerIngo Molnar <mingo@kernel.org>2016-04-19 04:44:52 -0400
commitabfb9498ee1327f534df92a7ecaea81a85913bae (patch)
tree5cf36e86f2f9b2166df60a3e2b59da196e848fb7
parent6666ea558b1f4134291c15ac59366f69c2d1f321 (diff)
x86/entry: Rename is_{ia32,x32}_task() to in_{ia32,x32}_syscall()
The is_ia32_task()/is_x32_task() function names are a big misnomer: they suggests that the compat-ness of a system call is a task property, which is not true, the compatness of a system call purely depends on how it was invoked through the system call layer. A task may call 32-bit and 64-bit and x32 system calls without changing any of its kernel visible state. This specific minomer is also actively dangerous, as it might cause kernel developers to use the wrong kind of security checks within system calls. So rename it to in_{ia32,x32}_syscall(). Suggested-by: Andy Lutomirski <luto@amacapital.net> Suggested-by: Ingo Molnar <mingo@kernel.org> Signed-off-by: Dmitry Safonov <dsafonov@virtuozzo.com> [ Expanded the changelog. ] Acked-by: Andy Lutomirski <luto@kernel.org> Cc: 0x7f454c46@gmail.com Cc: Borislav Petkov <bp@alien8.de> Cc: Brian Gerst <brgerst@gmail.com> Cc: Denys Vlasenko <dvlasenk@redhat.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: akpm@linux-foundation.org Cc: linux-mm@kvack.org Link: http://lkml.kernel.org/r/1460987025-30360-1-git-send-email-dsafonov@virtuozzo.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r--arch/x86/entry/common.c2
-rw-r--r--arch/x86/include/asm/compat.h4
-rw-r--r--arch/x86/include/asm/thread_info.h2
-rw-r--r--arch/x86/kernel/process_64.c2
-rw-r--r--arch/x86/kernel/ptrace.c2
-rw-r--r--arch/x86/kernel/signal.c2
-rw-r--r--arch/x86/kernel/uprobes.c2
7 files changed, 8 insertions, 8 deletions
diff --git a/arch/x86/entry/common.c b/arch/x86/entry/common.c
index e79d93d44ecd..ec138e538c44 100644
--- a/arch/x86/entry/common.c
+++ b/arch/x86/entry/common.c
@@ -191,7 +191,7 @@ long syscall_trace_enter_phase2(struct pt_regs *regs, u32 arch,
191 191
192long syscall_trace_enter(struct pt_regs *regs) 192long syscall_trace_enter(struct pt_regs *regs)
193{ 193{
194 u32 arch = is_ia32_task() ? AUDIT_ARCH_I386 : AUDIT_ARCH_X86_64; 194 u32 arch = in_ia32_syscall() ? AUDIT_ARCH_I386 : AUDIT_ARCH_X86_64;
195 unsigned long phase1_result = syscall_trace_enter_phase1(regs, arch); 195 unsigned long phase1_result = syscall_trace_enter_phase1(regs, arch);
196 196
197 if (phase1_result == 0) 197 if (phase1_result == 0)
diff --git a/arch/x86/include/asm/compat.h b/arch/x86/include/asm/compat.h
index ebb102e1bbc7..5a3b2c119ed0 100644
--- a/arch/x86/include/asm/compat.h
+++ b/arch/x86/include/asm/compat.h
@@ -307,7 +307,7 @@ static inline void __user *arch_compat_alloc_user_space(long len)
307 return (void __user *)round_down(sp - len, 16); 307 return (void __user *)round_down(sp - len, 16);
308} 308}
309 309
310static inline bool is_x32_task(void) 310static inline bool in_x32_syscall(void)
311{ 311{
312#ifdef CONFIG_X86_X32_ABI 312#ifdef CONFIG_X86_X32_ABI
313 if (task_pt_regs(current)->orig_ax & __X32_SYSCALL_BIT) 313 if (task_pt_regs(current)->orig_ax & __X32_SYSCALL_BIT)
@@ -318,7 +318,7 @@ static inline bool is_x32_task(void)
318 318
319static inline bool in_compat_syscall(void) 319static inline bool in_compat_syscall(void)
320{ 320{
321 return is_ia32_task() || is_x32_task(); 321 return in_ia32_syscall() || in_x32_syscall();
322} 322}
323#define in_compat_syscall in_compat_syscall /* override the generic impl */ 323#define in_compat_syscall in_compat_syscall /* override the generic impl */
324 324
diff --git a/arch/x86/include/asm/thread_info.h b/arch/x86/include/asm/thread_info.h
index ffae84df8a93..30c133ac05cd 100644
--- a/arch/x86/include/asm/thread_info.h
+++ b/arch/x86/include/asm/thread_info.h
@@ -255,7 +255,7 @@ static inline bool test_and_clear_restore_sigmask(void)
255 return true; 255 return true;
256} 256}
257 257
258static inline bool is_ia32_task(void) 258static inline bool in_ia32_syscall(void)
259{ 259{
260#ifdef CONFIG_X86_32 260#ifdef CONFIG_X86_32
261 return true; 261 return true;
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c
index 50337eac1ca2..24d1b7fb4399 100644
--- a/arch/x86/kernel/process_64.c
+++ b/arch/x86/kernel/process_64.c
@@ -210,7 +210,7 @@ int copy_thread_tls(unsigned long clone_flags, unsigned long sp,
210 */ 210 */
211 if (clone_flags & CLONE_SETTLS) { 211 if (clone_flags & CLONE_SETTLS) {
212#ifdef CONFIG_IA32_EMULATION 212#ifdef CONFIG_IA32_EMULATION
213 if (is_ia32_task()) 213 if (in_ia32_syscall())
214 err = do_set_thread_area(p, -1, 214 err = do_set_thread_area(p, -1,
215 (struct user_desc __user *)tls, 0); 215 (struct user_desc __user *)tls, 0);
216 else 216 else
diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c
index 32e9d9cbb884..0f4d2a5df2dc 100644
--- a/arch/x86/kernel/ptrace.c
+++ b/arch/x86/kernel/ptrace.c
@@ -1266,7 +1266,7 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
1266 compat_ulong_t caddr, compat_ulong_t cdata) 1266 compat_ulong_t caddr, compat_ulong_t cdata)
1267{ 1267{
1268#ifdef CONFIG_X86_X32_ABI 1268#ifdef CONFIG_X86_X32_ABI
1269 if (!is_ia32_task()) 1269 if (!in_ia32_syscall())
1270 return x32_arch_ptrace(child, request, caddr, cdata); 1270 return x32_arch_ptrace(child, request, caddr, cdata);
1271#endif 1271#endif
1272#ifdef CONFIG_IA32_EMULATION 1272#ifdef CONFIG_IA32_EMULATION
diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c
index 6408c09bbcd4..2ebcc60f0e14 100644
--- a/arch/x86/kernel/signal.c
+++ b/arch/x86/kernel/signal.c
@@ -762,7 +762,7 @@ handle_signal(struct ksignal *ksig, struct pt_regs *regs)
762static inline unsigned long get_nr_restart_syscall(const struct pt_regs *regs) 762static inline unsigned long get_nr_restart_syscall(const struct pt_regs *regs)
763{ 763{
764#ifdef CONFIG_X86_64 764#ifdef CONFIG_X86_64
765 if (is_ia32_task()) 765 if (in_ia32_syscall())
766 return __NR_ia32_restart_syscall; 766 return __NR_ia32_restart_syscall;
767#endif 767#endif
768#ifdef CONFIG_X86_X32_ABI 768#ifdef CONFIG_X86_X32_ABI
diff --git a/arch/x86/kernel/uprobes.c b/arch/x86/kernel/uprobes.c
index bf4db6eaec8f..98b4dc87628b 100644
--- a/arch/x86/kernel/uprobes.c
+++ b/arch/x86/kernel/uprobes.c
@@ -516,7 +516,7 @@ struct uprobe_xol_ops {
516 516
517static inline int sizeof_long(void) 517static inline int sizeof_long(void)
518{ 518{
519 return is_ia32_task() ? 4 : 8; 519 return in_ia32_syscall() ? 4 : 8;
520} 520}
521 521
522static int default_pre_xol_op(struct arch_uprobe *auprobe, struct pt_regs *regs) 522static int default_pre_xol_op(struct arch_uprobe *auprobe, struct pt_regs *regs)