Commit 2df1ad0d authored by Brian Gerst's avatar Brian Gerst Committed by Ingo Molnar
Browse files

x86/arch_prctl: Simplify sys_arch_prctl()



Use in_ia32_syscall() instead of a compat syscall entry.

No change in functionality intended.

Signed-off-by: default avatarBrian Gerst <brgerst@gmail.com>
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Link: https://lore.kernel.org/r/20250202202323.422113-2-brgerst@gmail.com
parent 06dd759b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -396,7 +396,7 @@
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
+1 −2
Original line number Diff line number Diff line
@@ -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 */
+4 −1
Original line number Diff line number Diff line
@@ -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;
}
+0 −5
Original line number Diff line number Diff line
@@ -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);
}
+0 −18
Original line number Diff line number Diff line
@@ -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;