forked from mirrors/linux
Another major aspect of supporting running of 32bit processes is the ability to access 32bit syscalls. Such syscalls can be invoked by using the legacy int 0x80 handler and sysenter/syscall instructions. If IA32 emulation is disabled ensure that each of those 3 distinct mechanisms are also disabled. For int 0x80 a #GP exception would be generated since the respective descriptor is not going to be loaded at all. Invoking sysenter will also result in a #GP since IA32_SYSENTER_CS contains an invalid segment. Finally, syscall instruction cannot really be disabled so it's configured to execute a minimal handler. Signed-off-by: Nikolay Borisov <nik.borisov@suse.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Link: https://lore.kernel.org/r/20230623111409.3047467-6-nik.borisov@suse.com
50 lines
1.2 KiB
C
50 lines
1.2 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _ASM_X86_PROTO_H
|
|
#define _ASM_X86_PROTO_H
|
|
|
|
#include <asm/ldt.h>
|
|
|
|
struct task_struct;
|
|
|
|
/* misc architecture specific prototypes */
|
|
|
|
void syscall_init(void);
|
|
|
|
#ifdef CONFIG_X86_64
|
|
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
|
|
void entry_INT80_32(void);
|
|
void entry_SYSENTER_32(void);
|
|
void __begin_SYSENTER_singlestep_region(void);
|
|
void __end_SYSENTER_singlestep_region(void);
|
|
#endif
|
|
|
|
#ifdef CONFIG_IA32_EMULATION
|
|
void entry_SYSENTER_compat(void);
|
|
void __end_entry_SYSENTER_compat(void);
|
|
void entry_SYSCALL_compat(void);
|
|
void entry_SYSCALL_compat_safe_stack(void);
|
|
void entry_SYSRETL_compat_unsafe_stack(void);
|
|
void entry_SYSRETL_compat_end(void);
|
|
void entry_INT80_compat(void);
|
|
#ifdef CONFIG_XEN_PV
|
|
void xen_entry_INT80_compat(void);
|
|
#endif
|
|
#else /* !CONFIG_IA32_EMULATION */
|
|
#define entry_SYSCALL_compat NULL
|
|
#define entry_SYSENTER_compat NULL
|
|
#endif
|
|
|
|
void x86_configure_nx(void);
|
|
|
|
extern int reboot_force;
|
|
|
|
long do_arch_prctl_common(int option, unsigned long arg2);
|
|
|
|
#endif /* _ASM_X86_PROTO_H */
|