x86/entry: Rename is_{ia32,x32}_task() to in_{ia32,x32}_syscall()
authorDmitry Safonov <dsafonov@virtuozzo.com>
Mon, 18 Apr 2016 13:43:43 +0000 (16:43 +0300)
committerIngo Molnar <mingo@kernel.org>
Tue, 19 Apr 2016 08:44:52 +0000 (10:44 +0200)
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>
arch/x86/entry/common.c
arch/x86/include/asm/compat.h
arch/x86/include/asm/thread_info.h
arch/x86/kernel/process_64.c
arch/x86/kernel/ptrace.c
arch/x86/kernel/signal.c
arch/x86/kernel/uprobes.c

index e79d93d44ecd9c66b1e29078a11aa1ee405c0fa2..ec138e538c44f9acf7f829827d14a3991473763f 100644 (file)
@@ -191,7 +191,7 @@ long syscall_trace_enter_phase2(struct pt_regs *regs, u32 arch,
 
 long syscall_trace_enter(struct pt_regs *regs)
 {
-       u32 arch = is_ia32_task() ? AUDIT_ARCH_I386 : AUDIT_ARCH_X86_64;
+       u32 arch = in_ia32_syscall() ? AUDIT_ARCH_I386 : AUDIT_ARCH_X86_64;
        unsigned long phase1_result = syscall_trace_enter_phase1(regs, arch);
 
        if (phase1_result == 0)
index ebb102e1bbc7ad84cff580de23380becbe900ed1..5a3b2c119ed0eb70137bff968607f5d44481f223 100644 (file)
@@ -307,7 +307,7 @@ static inline void __user *arch_compat_alloc_user_space(long len)
        return (void __user *)round_down(sp - len, 16);
 }
 
-static inline bool is_x32_task(void)
+static inline bool in_x32_syscall(void)
 {
 #ifdef CONFIG_X86_X32_ABI
        if (task_pt_regs(current)->orig_ax & __X32_SYSCALL_BIT)
@@ -318,7 +318,7 @@ static inline bool is_x32_task(void)
 
 static inline bool in_compat_syscall(void)
 {
-       return is_ia32_task() || is_x32_task();
+       return in_ia32_syscall() || in_x32_syscall();
 }
 #define in_compat_syscall in_compat_syscall    /* override the generic impl */
 
index ffae84df8a9313cd3cc7b12953c0c24a809cd792..30c133ac05cd86d6ddba68c8993160296cafde04 100644 (file)
@@ -255,7 +255,7 @@ static inline bool test_and_clear_restore_sigmask(void)
        return true;
 }
 
-static inline bool is_ia32_task(void)
+static inline bool in_ia32_syscall(void)
 {
 #ifdef CONFIG_X86_32
        return true;
index 50337eac1ca2d50e433817dc7a6b5686a3054b56..24d1b7fb4399ec2b4986b867306ab58b2d9d9839 100644 (file)
@@ -210,7 +210,7 @@ int copy_thread_tls(unsigned long clone_flags, unsigned long sp,
         */
        if (clone_flags & CLONE_SETTLS) {
 #ifdef CONFIG_IA32_EMULATION
-               if (is_ia32_task())
+               if (in_ia32_syscall())
                        err = do_set_thread_area(p, -1,
                                (struct user_desc __user *)tls, 0);
                else
index 32e9d9cbb884ae10f0f5035c47bafb69f4517f80..0f4d2a5df2dc208470f6c50bc9f913c1195d69af 100644 (file)
@@ -1266,7 +1266,7 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
                        compat_ulong_t caddr, compat_ulong_t cdata)
 {
 #ifdef CONFIG_X86_X32_ABI
-       if (!is_ia32_task())
+       if (!in_ia32_syscall())
                return x32_arch_ptrace(child, request, caddr, cdata);
 #endif
 #ifdef CONFIG_IA32_EMULATION
index 6408c09bbcd4a8d9f6dd339d750324a90248f29f..2ebcc60f0e140bc204c64ccacefe30e460297f77 100644 (file)
@@ -762,7 +762,7 @@ handle_signal(struct ksignal *ksig, struct pt_regs *regs)
 static inline unsigned long get_nr_restart_syscall(const struct pt_regs *regs)
 {
 #ifdef CONFIG_X86_64
-       if (is_ia32_task())
+       if (in_ia32_syscall())
                return __NR_ia32_restart_syscall;
 #endif
 #ifdef CONFIG_X86_X32_ABI
index bf4db6eaec8fda2aae48f2fe7c1cddb8d157b37f..98b4dc87628b1795bd544d317d471b42fe12b00a 100644 (file)
@@ -516,7 +516,7 @@ struct uprobe_xol_ops {
 
 static inline int sizeof_long(void)
 {
-       return is_ia32_task() ? 4 : 8;
+       return in_ia32_syscall() ? 4 : 8;
 }
 
 static int default_pre_xol_op(struct arch_uprobe *auprobe, struct pt_regs *regs)