Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755799AbdCTQfD (ORCPT ); Mon, 20 Mar 2017 12:35:03 -0400 Received: from terminus.zytor.com ([65.50.211.136]:55970 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755776AbdCTQe5 (ORCPT ); Mon, 20 Mar 2017 12:34:57 -0400 Date: Mon, 20 Mar 2017 09:33:50 -0700 From: tip-bot for Kyle Huey Message-ID: Cc: shuah@kernel.org, me@kylehuey.com, robert@ocallahan.org, khuey@kylehuey.com, dsafonov@virtuozzo.com, grzegorz.andrejczuk@intel.com, nadav.amit@gmail.com, dmatlack@google.com, bp@suse.de, boris.ostrovsky@oracle.com, richard@nod.at, pbonzini@redhat.com, luto@kernel.org, jdike@addtoit.com, peterz@infradead.org, andi@firstfloor.org, linux-kernel@vger.kernel.org, tglx@linutronix.de, viro@zeniv.linux.org.uk, rafael.j.wysocki@intel.com, len.brown@intel.com, rkrcmar@redhat.com, hpa@zytor.com, mingo@kernel.org, dave.hansen@linux.intel.com Reply-To: shuah@kernel.org, robert@ocallahan.org, me@kylehuey.com, grzegorz.andrejczuk@intel.com, dsafonov@virtuozzo.com, khuey@kylehuey.com, nadav.amit@gmail.com, dmatlack@google.com, bp@suse.de, richard@nod.at, boris.ostrovsky@oracle.com, andi@firstfloor.org, peterz@infradead.org, jdike@addtoit.com, pbonzini@redhat.com, luto@kernel.org, linux-kernel@vger.kernel.org, viro@zeniv.linux.org.uk, rafael.j.wysocki@intel.com, tglx@linutronix.de, len.brown@intel.com, hpa@zytor.com, rkrcmar@redhat.com, dave.hansen@linux.intel.com, mingo@kernel.org In-Reply-To: <20170320081628.18952-7-khuey@kylehuey.com> References: <20170320081628.18952-7-khuey@kylehuey.com> To: linux-tip-commits@vger.kernel.org Subject: [tip:x86/process] x86/syscalls/32: Wire up arch_prctl on x86-32 Git-Commit-ID: 79170fda313ed5be2394f87aa2a00d597f8ed4a1 X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 5047 Lines: 147 Commit-ID: 79170fda313ed5be2394f87aa2a00d597f8ed4a1 Gitweb: http://git.kernel.org/tip/79170fda313ed5be2394f87aa2a00d597f8ed4a1 Author: Kyle Huey AuthorDate: Mon, 20 Mar 2017 01:16:24 -0700 Committer: Thomas Gleixner CommitDate: Mon, 20 Mar 2017 16:10:33 +0100 x86/syscalls/32: Wire up arch_prctl on x86-32 Hook up arch_prctl to call do_arch_prctl() on x86-32, and in 32 bit compat mode on x86-64. This allows to have arch_prctls that are not specific to 64 bits. On UML, simply stub out this syscall. Signed-off-by: Kyle Huey Cc: Grzegorz Andrejczuk Cc: kvm@vger.kernel.org Cc: Radim Krčmář Cc: Peter Zijlstra Cc: Dave Hansen Cc: Andi Kleen Cc: linux-kselftest@vger.kernel.org Cc: Nadav Amit Cc: Robert O'Callahan Cc: Richard Weinberger Cc: "Rafael J. Wysocki" Cc: Borislav Petkov Cc: Andy Lutomirski Cc: Len Brown Cc: Shuah Khan Cc: user-mode-linux-devel@lists.sourceforge.net Cc: Jeff Dike Cc: Alexander Viro Cc: user-mode-linux-user@lists.sourceforge.net Cc: David Matlack Cc: Boris Ostrovsky Cc: Dmitry Safonov Cc: linux-fsdevel@vger.kernel.org Cc: Paolo Bonzini Link: http://lkml.kernel.org/r/20170320081628.18952-7-khuey@kylehuey.com Signed-off-by: Thomas Gleixner --- arch/x86/entry/syscalls/syscall_32.tbl | 1 + arch/x86/kernel/process_32.c | 7 +++++++ arch/x86/kernel/process_64.c | 7 +++++++ arch/x86/um/Makefile | 2 +- arch/x86/um/syscalls_32.c | 7 +++++++ include/linux/compat.h | 2 ++ 6 files changed, 25 insertions(+), 1 deletion(-) diff --git a/arch/x86/entry/syscalls/syscall_32.tbl b/arch/x86/entry/syscalls/syscall_32.tbl index 9ba050f..0af59fa 100644 --- a/arch/x86/entry/syscalls/syscall_32.tbl +++ b/arch/x86/entry/syscalls/syscall_32.tbl @@ -390,3 +390,4 @@ 381 i386 pkey_alloc sys_pkey_alloc 382 i386 pkey_free sys_pkey_free 383 i386 statx sys_statx +384 i386 arch_prctl sys_arch_prctl compat_sys_arch_prctl diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c index 4c818f8..ff40e74 100644 --- a/arch/x86/kernel/process_32.c +++ b/arch/x86/kernel/process_32.c @@ -37,6 +37,7 @@ #include #include #include +#include #include #include @@ -56,6 +57,7 @@ #include #include #include +#include void __show_regs(struct pt_regs *regs, int all) { @@ -304,3 +306,8 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) return prev_p; } + +SYSCALL_DEFINE2(arch_prctl, int, option, unsigned long, arg2) +{ + return do_arch_prctl_common(current, option, arg2); +} diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c index d81b0a6..ea1a618 100644 --- a/arch/x86/kernel/process_64.c +++ b/arch/x86/kernel/process_64.c @@ -635,6 +635,13 @@ SYSCALL_DEFINE2(arch_prctl, int, option, unsigned long, arg2) return ret; } +#ifdef CONFIG_IA32_EMULATION +COMPAT_SYSCALL_DEFINE2(arch_prctl, int, option, unsigned long, arg2) +{ + return do_arch_prctl_common(current, option, arg2); +} +#endif + unsigned long KSTK_ESP(struct task_struct *task) { return task_pt_regs(task)->sp; diff --git a/arch/x86/um/Makefile b/arch/x86/um/Makefile index e7e7055..69f0827 100644 --- a/arch/x86/um/Makefile +++ b/arch/x86/um/Makefile @@ -16,7 +16,7 @@ obj-y = bug.o bugs_$(BITS).o delay.o fault.o ldt.o \ ifeq ($(CONFIG_X86_32),y) -obj-y += checksum_32.o +obj-y += checksum_32.o syscalls_32.o obj-$(CONFIG_ELF_CORE) += elfcore.o subarch-y = ../lib/string_32.o ../lib/atomic64_32.o ../lib/atomic64_cx8_32.o diff --git a/arch/x86/um/syscalls_32.c b/arch/x86/um/syscalls_32.c new file mode 100644 index 0000000..627d688 --- /dev/null +++ b/arch/x86/um/syscalls_32.c @@ -0,0 +1,7 @@ +#include +#include + +SYSCALL_DEFINE2(arch_prctl, int, option, unsigned long, arg2) +{ + return -EINVAL; +} diff --git a/include/linux/compat.h b/include/linux/compat.h index aef47be..af9dbc4 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h @@ -723,6 +723,8 @@ asmlinkage long compat_sys_sched_rr_get_interval(compat_pid_t pid, asmlinkage long compat_sys_fanotify_mark(int, unsigned int, __u32, __u32, int, const char __user *); +asmlinkage long compat_sys_arch_prctl(int option, unsigned long arg2); + /* * For most but not all architectures, "am I in a compat syscall?" and * "am I a compat task?" are the same question. For architectures on which