lkml.org 
[lkml]   [2020]   [Jan]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 048/203] syscalls/x86: Use COMPAT_SYSCALL_DEFINE0 for IA32 (rt_)sigreturn
    Date
    From: Sami Tolvanen <samitolvanen@google.com>

    commit 00198a6eaf66609de5e4de9163bb42c7ca9dd7b7 upstream.

    Use COMPAT_SYSCALL_DEFINE0 to define (rt_)sigreturn() syscalls to
    replace sys32_sigreturn() and sys32_rt_sigreturn(). This fixes indirect
    call mismatches with Control-Flow Integrity (CFI) checking.

    Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
    Acked-by: Andy Lutomirski <luto@kernel.org>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: H . Peter Anvin <hpa@zytor.com>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: https://lkml.kernel.org/r/20191008224049.115427-4-samitolvanen@google.com
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/x86/entry/syscalls/syscall_32.tbl | 4 ++--
    arch/x86/ia32/ia32_signal.c | 5 +++--
    2 files changed, 5 insertions(+), 4 deletions(-)

    --- a/arch/x86/entry/syscalls/syscall_32.tbl
    +++ b/arch/x86/entry/syscalls/syscall_32.tbl
    @@ -130,7 +130,7 @@
    116 i386 sysinfo sys_sysinfo __ia32_compat_sys_sysinfo
    117 i386 ipc sys_ipc __ia32_compat_sys_ipc
    118 i386 fsync sys_fsync __ia32_sys_fsync
    -119 i386 sigreturn sys_sigreturn sys32_sigreturn
    +119 i386 sigreturn sys_sigreturn __ia32_compat_sys_sigreturn
    120 i386 clone sys_clone __ia32_compat_sys_x86_clone
    121 i386 setdomainname sys_setdomainname __ia32_sys_setdomainname
    122 i386 uname sys_newuname __ia32_sys_newuname
    @@ -184,7 +184,7 @@
    170 i386 setresgid sys_setresgid16 __ia32_sys_setresgid16
    171 i386 getresgid sys_getresgid16 __ia32_sys_getresgid16
    172 i386 prctl sys_prctl __ia32_sys_prctl
    -173 i386 rt_sigreturn sys_rt_sigreturn sys32_rt_sigreturn
    +173 i386 rt_sigreturn sys_rt_sigreturn __ia32_compat_sys_rt_sigreturn
    174 i386 rt_sigaction sys_rt_sigaction __ia32_compat_sys_rt_sigaction
    175 i386 rt_sigprocmask sys_rt_sigprocmask __ia32_compat_sys_rt_sigprocmask
    176 i386 rt_sigpending sys_rt_sigpending __ia32_compat_sys_rt_sigpending
    --- a/arch/x86/ia32/ia32_signal.c
    +++ b/arch/x86/ia32/ia32_signal.c
    @@ -21,6 +21,7 @@
    #include <linux/personality.h>
    #include <linux/compat.h>
    #include <linux/binfmts.h>
    +#include <linux/syscalls.h>
    #include <asm/ucontext.h>
    #include <linux/uaccess.h>
    #include <asm/fpu/internal.h>
    @@ -118,7 +119,7 @@ static int ia32_restore_sigcontext(struc
    return err;
    }

    -asmlinkage long sys32_sigreturn(void)
    +COMPAT_SYSCALL_DEFINE0(sigreturn)
    {
    struct pt_regs *regs = current_pt_regs();
    struct sigframe_ia32 __user *frame = (struct sigframe_ia32 __user *)(regs->sp-8);
    @@ -144,7 +145,7 @@ badframe:
    return 0;
    }

    -asmlinkage long sys32_rt_sigreturn(void)
    +COMPAT_SYSCALL_DEFINE0(rt_sigreturn)
    {
    struct pt_regs *regs = current_pt_regs();
    struct rt_sigframe_ia32 __user *frame;

    \
     
     \ /
      Last update: 2020-01-17 00:48    [W:3.527 / U:0.440 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site