x86/arch_prctl: Simplify sys_arch_prctl()
authorBrian Gerst <brgerst@gmail.com>
Sun, 2 Feb 2025 20:23:22 +0000 (15:23 -0500)
committerIngo Molnar <mingo@kernel.org>
Fri, 21 Feb 2025 21:32:25 +0000 (22:32 +0100)
Use in_ia32_syscall() instead of a compat syscall entry.

No change in functionality intended.

Signed-off-by: Brian Gerst <brgerst@gmail.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Link: https://lore.kernel.org/r/20250202202323.422113-2-brgerst@gmail.com
arch/x86/entry/syscalls/syscall_32.tbl
arch/x86/include/asm/proto.h
arch/x86/kernel/process.c
arch/x86/kernel/process_32.c
arch/x86/kernel/process_64.c

index 4d0fb2fba7e208ae9455459afe11e277321d9f74..62283097a7cc71b7af0d889b1c54c6ed98b07680 100644 (file)
 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
+384    i386    arch_prctl              sys_arch_prctl
 385    i386    io_pgetevents           sys_io_pgetevents_time32        compat_sys_io_pgetevents
 386    i386    rseq                    sys_rseq
 393    i386    semget                  sys_semget
index 484f4f0131a5cceedf373804573074010a9892b0..05224a6958727d7c7cc77ce4e5a658b9fa48c386 100644 (file)
@@ -15,7 +15,6 @@ void entry_SYSCALL_64(void);
 void entry_SYSCALL_64_safe_stack(void);
 void entry_SYSRETQ_unsafe_stack(void);
 void entry_SYSRETQ_end(void);
-long do_arch_prctl_64(struct task_struct *task, int option, unsigned long arg2);
 #endif
 
 #ifdef CONFIG_X86_32
@@ -41,6 +40,6 @@ void x86_configure_nx(void);
 
 extern int reboot_force;
 
-long do_arch_prctl_common(int option, unsigned long arg2);
+long do_arch_prctl_64(struct task_struct *task, int option, unsigned long arg2);
 
 #endif /* _ASM_X86_PROTO_H */
index 6da6769d7254a46d87118ac016ede70d3f56f020..0f398a42c1e2042c0e5c8d1d5fae6d7573779445 100644 (file)
@@ -1043,7 +1043,7 @@ unsigned long __get_wchan(struct task_struct *p)
        return addr;
 }
 
-long do_arch_prctl_common(int option, unsigned long arg2)
+SYSCALL_DEFINE2(arch_prctl, int, option, unsigned long, arg2)
 {
        switch (option) {
        case ARCH_GET_CPUID:
@@ -1058,5 +1058,8 @@ long do_arch_prctl_common(int option, unsigned long arg2)
                return fpu_xstate_prctl(option, arg2);
        }
 
+       if (!in_ia32_syscall())
+               return do_arch_prctl_64(current, option, arg2);
+
        return -EINVAL;
 }
index 0917c7f25720be91372bacddb1a3032323b8996f..2bdab416298cef5d9ef11c8e957c46dfc49ee2d2 100644 (file)
@@ -215,8 +215,3 @@ __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(option, arg2);
-}
index 226472332a70dd02902f81c21207d770e698aeed..e067c61b5fca26f3f6c42a2199c1f8cc0a15e3e1 100644 (file)
@@ -980,24 +980,6 @@ long do_arch_prctl_64(struct task_struct *task, int option, unsigned long arg2)
        return ret;
 }
 
-SYSCALL_DEFINE2(arch_prctl, int, option, unsigned long, arg2)
-{
-       long ret;
-
-       ret = do_arch_prctl_64(current, option, arg2);
-       if (ret == -EINVAL)
-               ret = do_arch_prctl_common(option, arg2);
-
-       return ret;
-}
-
-#ifdef CONFIG_IA32_EMULATION
-COMPAT_SYSCALL_DEFINE2(arch_prctl, int, option, unsigned long, arg2)
-{
-       return do_arch_prctl_common(option, arg2);
-}
-#endif
-
 unsigned long KSTK_ESP(struct task_struct *task)
 {
        return task_pt_regs(task)->sp;