mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	syscalls/x86: Use 'struct pt_regs' based syscall calling for IA32_EMULATION and x32
Extend ARCH_HAS_SYSCALL_WRAPPER for i386 emulation and for x32 on 64-bit
x86.
For x32, all we need to do is to create an additional stub for each
compat syscall which decodes the parameters in x86-64 ordering, e.g.:
	asmlinkage long __compat_sys_x32_xyzzy(struct pt_regs *regs)
	{
		return c_SyS_xyzzy(regs->di, regs->si, regs->dx);
	}
For i386 emulation, we need to teach compat_sys_*() to take struct
pt_regs as its only argument, e.g.:
	asmlinkage long __compat_sys_ia32_xyzzy(struct pt_regs *regs)
	{
		return c_SyS_xyzzy(regs->bx, regs->cx, regs->dx);
	}
In addition, we need to create additional stubs for common syscalls
(that is, for syscalls which have the same parameters on 32-bit and
64-bit), e.g.:
	asmlinkage long __sys_ia32_xyzzy(struct pt_regs *regs)
	{
		return c_sys_xyzzy(regs->bx, regs->cx, regs->dx);
	}
This approach avoids leaking random user-provided register content down
the call chain.
This patch is based on an original proof-of-concept
 | From: Linus Torvalds <torvalds@linux-foundation.org>
 | Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
and was split up and heavily modified by me, in particular to base it on
ARCH_HAS_SYSCALL_WRAPPER.
Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/20180405095307.3730-6-linux@dominikbrodowski.net
Signed-off-by: Ingo Molnar <mingo@kernel.org>
			
			
This commit is contained in:
		
							parent
							
								
									7303e30ec1
								
							
						
					
					
						commit
						ebeb8c82ff
					
				
					 6 changed files with 509 additions and 380 deletions
				
			
		| 
						 | 
				
			
			@ -2957,5 +2957,5 @@ source "lib/Kconfig"
 | 
			
		|||
 | 
			
		||||
config SYSCALL_PTREGS
 | 
			
		||||
	def_bool y
 | 
			
		||||
	depends on X86_64 && !COMPAT
 | 
			
		||||
	depends on X86_64
 | 
			
		||||
	select ARCH_HAS_SYSCALL_WRAPPER
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -325,6 +325,9 @@ static __always_inline void do_syscall_32_irqs_on(struct pt_regs *regs)
 | 
			
		|||
 | 
			
		||||
	if (likely(nr < IA32_NR_syscalls)) {
 | 
			
		||||
		nr = array_index_nospec(nr, IA32_NR_syscalls);
 | 
			
		||||
#ifdef CONFIG_SYSCALL_PTREGS
 | 
			
		||||
		regs->ax = ia32_sys_call_table[nr](regs);
 | 
			
		||||
#else
 | 
			
		||||
		/*
 | 
			
		||||
		 * It's possible that a 32-bit syscall implementation
 | 
			
		||||
		 * takes a 64-bit parameter but nonetheless assumes that
 | 
			
		||||
| 
						 | 
				
			
			@ -335,6 +338,7 @@ static __always_inline void do_syscall_32_irqs_on(struct pt_regs *regs)
 | 
			
		|||
			(unsigned int)regs->bx, (unsigned int)regs->cx,
 | 
			
		||||
			(unsigned int)regs->dx, (unsigned int)regs->si,
 | 
			
		||||
			(unsigned int)regs->di, (unsigned int)regs->bp);
 | 
			
		||||
#endif /* CONFIG_SYSCALL_PTREGS */
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	syscall_return_slowpath(regs);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,14 +7,23 @@
 | 
			
		|||
#include <asm/asm-offsets.h>
 | 
			
		||||
#include <asm/syscall.h>
 | 
			
		||||
 | 
			
		||||
#define __SYSCALL_I386(nr, sym, qual) extern asmlinkage long sym(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) ;
 | 
			
		||||
#ifdef CONFIG_SYSCALL_PTREGS
 | 
			
		||||
/* On X86_64, we use struct pt_regs * to pass parameters to syscalls */
 | 
			
		||||
#define __SYSCALL_I386(nr, sym, qual) extern asmlinkage long sym(const struct pt_regs *);
 | 
			
		||||
 | 
			
		||||
/* this is a lie, but it does not hurt as sys_ni_syscall just returns -EINVAL */
 | 
			
		||||
extern asmlinkage long sys_ni_syscall(const struct pt_regs *);
 | 
			
		||||
 | 
			
		||||
#else /* CONFIG_SYSCALL_PTREGS */
 | 
			
		||||
#define __SYSCALL_I386(nr, sym, qual) extern asmlinkage long sym(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long);
 | 
			
		||||
extern asmlinkage long sys_ni_syscall(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long);
 | 
			
		||||
#endif /* CONFIG_SYSCALL_PTREGS */
 | 
			
		||||
 | 
			
		||||
#include <asm/syscalls_32.h>
 | 
			
		||||
#undef __SYSCALL_I386
 | 
			
		||||
 | 
			
		||||
#define __SYSCALL_I386(nr, sym, qual) [nr] = sym,
 | 
			
		||||
 | 
			
		||||
extern asmlinkage long sys_ni_syscall(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long);
 | 
			
		||||
 | 
			
		||||
__visible const sys_call_ptr_t ia32_sys_call_table[__NR_syscall_compat_max+1] = {
 | 
			
		||||
	/*
 | 
			
		||||
	 * Smells like a compiler bug -- it doesn't work
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,390 +4,395 @@
 | 
			
		|||
# The format is:
 | 
			
		||||
# <number> <abi> <name> <entry point> <compat entry point>
 | 
			
		||||
#
 | 
			
		||||
# The __sys_ia32 and __compat_sys_ia32 stubs are created on-the-fly for
 | 
			
		||||
# sys_*() system calls and compat_sys_*() compat system calls if
 | 
			
		||||
# IA32_EMULATION is defined, and expect struct pt_regs *regs as their only
 | 
			
		||||
# parameter.
 | 
			
		||||
#
 | 
			
		||||
# The abi is always "i386" for this file.
 | 
			
		||||
#
 | 
			
		||||
0	i386	restart_syscall		sys_restart_syscall
 | 
			
		||||
1	i386	exit			sys_exit
 | 
			
		||||
1	i386	exit			sys_exit			__sys_ia32_exit
 | 
			
		||||
2	i386	fork			sys_fork
 | 
			
		||||
3	i386	read			sys_read
 | 
			
		||||
4	i386	write			sys_write
 | 
			
		||||
5	i386	open			sys_open			compat_sys_open
 | 
			
		||||
6	i386	close			sys_close
 | 
			
		||||
7	i386	waitpid			sys_waitpid
 | 
			
		||||
8	i386	creat			sys_creat
 | 
			
		||||
9	i386	link			sys_link
 | 
			
		||||
10	i386	unlink			sys_unlink
 | 
			
		||||
11	i386	execve			sys_execve			compat_sys_execve
 | 
			
		||||
12	i386	chdir			sys_chdir
 | 
			
		||||
13	i386	time			sys_time			compat_sys_time
 | 
			
		||||
14	i386	mknod			sys_mknod
 | 
			
		||||
15	i386	chmod			sys_chmod
 | 
			
		||||
16	i386	lchown			sys_lchown16
 | 
			
		||||
3	i386	read			sys_read			__sys_ia32_read
 | 
			
		||||
4	i386	write			sys_write			__sys_ia32_write
 | 
			
		||||
5	i386	open			sys_open			__compat_sys_ia32_open
 | 
			
		||||
6	i386	close			sys_close			__sys_ia32_close
 | 
			
		||||
7	i386	waitpid			sys_waitpid			__sys_ia32_waitpid
 | 
			
		||||
8	i386	creat			sys_creat			__sys_ia32_creat
 | 
			
		||||
9	i386	link			sys_link			__sys_ia32_link
 | 
			
		||||
10	i386	unlink			sys_unlink			__sys_ia32_unlink
 | 
			
		||||
11	i386	execve			sys_execve			__compat_sys_ia32_execve
 | 
			
		||||
12	i386	chdir			sys_chdir			__sys_ia32_chdir
 | 
			
		||||
13	i386	time			sys_time			__compat_sys_ia32_time
 | 
			
		||||
14	i386	mknod			sys_mknod			__sys_ia32_mknod
 | 
			
		||||
15	i386	chmod			sys_chmod			__sys_ia32_chmod
 | 
			
		||||
16	i386	lchown			sys_lchown16			__sys_ia32_lchown16
 | 
			
		||||
17	i386	break
 | 
			
		||||
18	i386	oldstat			sys_stat
 | 
			
		||||
19	i386	lseek			sys_lseek			compat_sys_lseek
 | 
			
		||||
18	i386	oldstat			sys_stat			__sys_ia32_stat
 | 
			
		||||
19	i386	lseek			sys_lseek			__compat_sys_ia32_lseek
 | 
			
		||||
20	i386	getpid			sys_getpid
 | 
			
		||||
21	i386	mount			sys_mount			compat_sys_mount
 | 
			
		||||
22	i386	umount			sys_oldumount
 | 
			
		||||
23	i386	setuid			sys_setuid16
 | 
			
		||||
21	i386	mount			sys_mount			__compat_sys_ia32_mount
 | 
			
		||||
22	i386	umount			sys_oldumount			__sys_ia32_oldumount
 | 
			
		||||
23	i386	setuid			sys_setuid16			__sys_ia32_setuid16
 | 
			
		||||
24	i386	getuid			sys_getuid16
 | 
			
		||||
25	i386	stime			sys_stime			compat_sys_stime
 | 
			
		||||
26	i386	ptrace			sys_ptrace			compat_sys_ptrace
 | 
			
		||||
27	i386	alarm			sys_alarm
 | 
			
		||||
28	i386	oldfstat		sys_fstat
 | 
			
		||||
25	i386	stime			sys_stime			__compat_sys_ia32_stime
 | 
			
		||||
26	i386	ptrace			sys_ptrace			__compat_sys_ia32_ptrace
 | 
			
		||||
27	i386	alarm			sys_alarm			__sys_ia32_alarm
 | 
			
		||||
28	i386	oldfstat		sys_fstat			__sys_ia32_fstat
 | 
			
		||||
29	i386	pause			sys_pause
 | 
			
		||||
30	i386	utime			sys_utime			compat_sys_utime
 | 
			
		||||
30	i386	utime			sys_utime			__compat_sys_ia32_utime
 | 
			
		||||
31	i386	stty
 | 
			
		||||
32	i386	gtty
 | 
			
		||||
33	i386	access			sys_access
 | 
			
		||||
34	i386	nice			sys_nice
 | 
			
		||||
33	i386	access			sys_access			__sys_ia32_access
 | 
			
		||||
34	i386	nice			sys_nice			__sys_ia32_nice
 | 
			
		||||
35	i386	ftime
 | 
			
		||||
36	i386	sync			sys_sync
 | 
			
		||||
37	i386	kill			sys_kill
 | 
			
		||||
38	i386	rename			sys_rename
 | 
			
		||||
39	i386	mkdir			sys_mkdir
 | 
			
		||||
40	i386	rmdir			sys_rmdir
 | 
			
		||||
41	i386	dup			sys_dup
 | 
			
		||||
42	i386	pipe			sys_pipe
 | 
			
		||||
43	i386	times			sys_times			compat_sys_times
 | 
			
		||||
37	i386	kill			sys_kill			__sys_ia32_kill
 | 
			
		||||
38	i386	rename			sys_rename			__sys_ia32_rename
 | 
			
		||||
39	i386	mkdir			sys_mkdir			__sys_ia32_mkdir
 | 
			
		||||
40	i386	rmdir			sys_rmdir			__sys_ia32_rmdir
 | 
			
		||||
41	i386	dup			sys_dup				__sys_ia32_dup
 | 
			
		||||
42	i386	pipe			sys_pipe			__sys_ia32_pipe
 | 
			
		||||
43	i386	times			sys_times			__compat_sys_ia32_times
 | 
			
		||||
44	i386	prof
 | 
			
		||||
45	i386	brk			sys_brk
 | 
			
		||||
46	i386	setgid			sys_setgid16
 | 
			
		||||
45	i386	brk			sys_brk				__sys_ia32_brk
 | 
			
		||||
46	i386	setgid			sys_setgid16			__sys_ia32_setgid16
 | 
			
		||||
47	i386	getgid			sys_getgid16
 | 
			
		||||
48	i386	signal			sys_signal
 | 
			
		||||
48	i386	signal			sys_signal			__sys_ia32_signal
 | 
			
		||||
49	i386	geteuid			sys_geteuid16
 | 
			
		||||
50	i386	getegid			sys_getegid16
 | 
			
		||||
51	i386	acct			sys_acct
 | 
			
		||||
52	i386	umount2			sys_umount
 | 
			
		||||
51	i386	acct			sys_acct			__sys_ia32_acct
 | 
			
		||||
52	i386	umount2			sys_umount			__sys_ia32_umount
 | 
			
		||||
53	i386	lock
 | 
			
		||||
54	i386	ioctl			sys_ioctl			compat_sys_ioctl
 | 
			
		||||
55	i386	fcntl			sys_fcntl			compat_sys_fcntl64
 | 
			
		||||
54	i386	ioctl			sys_ioctl			__compat_sys_ia32_ioctl
 | 
			
		||||
55	i386	fcntl			sys_fcntl			__compat_sys_ia32_fcntl64
 | 
			
		||||
56	i386	mpx
 | 
			
		||||
57	i386	setpgid			sys_setpgid
 | 
			
		||||
57	i386	setpgid			sys_setpgid			__sys_ia32_setpgid
 | 
			
		||||
58	i386	ulimit
 | 
			
		||||
59	i386	oldolduname		sys_olduname
 | 
			
		||||
60	i386	umask			sys_umask
 | 
			
		||||
61	i386	chroot			sys_chroot
 | 
			
		||||
62	i386	ustat			sys_ustat			compat_sys_ustat
 | 
			
		||||
63	i386	dup2			sys_dup2
 | 
			
		||||
59	i386	oldolduname		sys_olduname			__sys_ia32_olduname
 | 
			
		||||
60	i386	umask			sys_umask			__sys_ia32_umask
 | 
			
		||||
61	i386	chroot			sys_chroot			__sys_ia32_chroot
 | 
			
		||||
62	i386	ustat			sys_ustat			__compat_sys_ia32_ustat
 | 
			
		||||
63	i386	dup2			sys_dup2			__sys_ia32_dup2
 | 
			
		||||
64	i386	getppid			sys_getppid
 | 
			
		||||
65	i386	getpgrp			sys_getpgrp
 | 
			
		||||
66	i386	setsid			sys_setsid
 | 
			
		||||
67	i386	sigaction		sys_sigaction			compat_sys_sigaction
 | 
			
		||||
67	i386	sigaction		sys_sigaction			__compat_sys_ia32_sigaction
 | 
			
		||||
68	i386	sgetmask		sys_sgetmask
 | 
			
		||||
69	i386	ssetmask		sys_ssetmask
 | 
			
		||||
70	i386	setreuid		sys_setreuid16
 | 
			
		||||
71	i386	setregid		sys_setregid16
 | 
			
		||||
72	i386	sigsuspend		sys_sigsuspend
 | 
			
		||||
73	i386	sigpending		sys_sigpending			compat_sys_sigpending
 | 
			
		||||
74	i386	sethostname		sys_sethostname
 | 
			
		||||
75	i386	setrlimit		sys_setrlimit			compat_sys_setrlimit
 | 
			
		||||
76	i386	getrlimit		sys_old_getrlimit		compat_sys_old_getrlimit
 | 
			
		||||
77	i386	getrusage		sys_getrusage			compat_sys_getrusage
 | 
			
		||||
78	i386	gettimeofday		sys_gettimeofday		compat_sys_gettimeofday
 | 
			
		||||
79	i386	settimeofday		sys_settimeofday		compat_sys_settimeofday
 | 
			
		||||
80	i386	getgroups		sys_getgroups16
 | 
			
		||||
81	i386	setgroups		sys_setgroups16
 | 
			
		||||
82	i386	select			sys_old_select			compat_sys_old_select
 | 
			
		||||
83	i386	symlink			sys_symlink
 | 
			
		||||
84	i386	oldlstat		sys_lstat
 | 
			
		||||
85	i386	readlink		sys_readlink
 | 
			
		||||
86	i386	uselib			sys_uselib
 | 
			
		||||
87	i386	swapon			sys_swapon
 | 
			
		||||
88	i386	reboot			sys_reboot
 | 
			
		||||
89	i386	readdir			sys_old_readdir			compat_sys_old_readdir
 | 
			
		||||
90	i386	mmap			sys_old_mmap			compat_sys_x86_mmap
 | 
			
		||||
91	i386	munmap			sys_munmap
 | 
			
		||||
92	i386	truncate		sys_truncate			compat_sys_truncate
 | 
			
		||||
93	i386	ftruncate		sys_ftruncate			compat_sys_ftruncate
 | 
			
		||||
94	i386	fchmod			sys_fchmod
 | 
			
		||||
95	i386	fchown			sys_fchown16
 | 
			
		||||
96	i386	getpriority		sys_getpriority
 | 
			
		||||
97	i386	setpriority		sys_setpriority
 | 
			
		||||
69	i386	ssetmask		sys_ssetmask			__sys_ia32_ssetmask
 | 
			
		||||
70	i386	setreuid		sys_setreuid16			__sys_ia32_setreuid16
 | 
			
		||||
71	i386	setregid		sys_setregid16			__sys_ia32_setregid16
 | 
			
		||||
72	i386	sigsuspend		sys_sigsuspend			__sys_ia32_sigsuspend
 | 
			
		||||
73	i386	sigpending		sys_sigpending			__compat_sys_ia32_sigpending
 | 
			
		||||
74	i386	sethostname		sys_sethostname			__sys_ia32_sethostname
 | 
			
		||||
75	i386	setrlimit		sys_setrlimit			__compat_sys_ia32_setrlimit
 | 
			
		||||
76	i386	getrlimit		sys_old_getrlimit		__compat_sys_ia32_old_getrlimit
 | 
			
		||||
77	i386	getrusage		sys_getrusage			__compat_sys_ia32_getrusage
 | 
			
		||||
78	i386	gettimeofday		sys_gettimeofday		__compat_sys_ia32_gettimeofday
 | 
			
		||||
79	i386	settimeofday		sys_settimeofday		__compat_sys_ia32_settimeofday
 | 
			
		||||
80	i386	getgroups		sys_getgroups16			__sys_ia32_getgroups16
 | 
			
		||||
81	i386	setgroups		sys_setgroups16			__sys_ia32_setgroups16
 | 
			
		||||
82	i386	select			sys_old_select			__compat_sys_ia32_old_select
 | 
			
		||||
83	i386	symlink			sys_symlink			__sys_ia32_symlink
 | 
			
		||||
84	i386	oldlstat		sys_lstat			__sys_ia32_lstat
 | 
			
		||||
85	i386	readlink		sys_readlink			__sys_ia32_readlink
 | 
			
		||||
86	i386	uselib			sys_uselib			__sys_ia32_uselib
 | 
			
		||||
87	i386	swapon			sys_swapon			__sys_ia32_swapon
 | 
			
		||||
88	i386	reboot			sys_reboot			__sys_ia32_reboot
 | 
			
		||||
89	i386	readdir			sys_old_readdir			__compat_sys_ia32_old_readdir
 | 
			
		||||
90	i386	mmap			sys_old_mmap			__compat_sys_ia32_x86_mmap
 | 
			
		||||
91	i386	munmap			sys_munmap			__sys_ia32_munmap
 | 
			
		||||
92	i386	truncate		sys_truncate			__compat_sys_ia32_truncate
 | 
			
		||||
93	i386	ftruncate		sys_ftruncate			__compat_sys_ia32_ftruncate
 | 
			
		||||
94	i386	fchmod			sys_fchmod			__sys_ia32_fchmod
 | 
			
		||||
95	i386	fchown			sys_fchown16			__sys_ia32_fchown16
 | 
			
		||||
96	i386	getpriority		sys_getpriority			__sys_ia32_getpriority
 | 
			
		||||
97	i386	setpriority		sys_setpriority			__sys_ia32_setpriority
 | 
			
		||||
98	i386	profil
 | 
			
		||||
99	i386	statfs			sys_statfs			compat_sys_statfs
 | 
			
		||||
100	i386	fstatfs			sys_fstatfs			compat_sys_fstatfs
 | 
			
		||||
101	i386	ioperm			sys_ioperm
 | 
			
		||||
102	i386	socketcall		sys_socketcall			compat_sys_socketcall
 | 
			
		||||
103	i386	syslog			sys_syslog
 | 
			
		||||
104	i386	setitimer		sys_setitimer			compat_sys_setitimer
 | 
			
		||||
105	i386	getitimer		sys_getitimer			compat_sys_getitimer
 | 
			
		||||
106	i386	stat			sys_newstat			compat_sys_newstat
 | 
			
		||||
107	i386	lstat			sys_newlstat			compat_sys_newlstat
 | 
			
		||||
108	i386	fstat			sys_newfstat			compat_sys_newfstat
 | 
			
		||||
109	i386	olduname		sys_uname
 | 
			
		||||
110	i386	iopl			sys_iopl
 | 
			
		||||
99	i386	statfs			sys_statfs			__compat_sys_ia32_statfs
 | 
			
		||||
100	i386	fstatfs			sys_fstatfs			__compat_sys_ia32_fstatfs
 | 
			
		||||
101	i386	ioperm			sys_ioperm			__sys_ia32_ioperm
 | 
			
		||||
102	i386	socketcall		sys_socketcall			__compat_sys_ia32_socketcall
 | 
			
		||||
103	i386	syslog			sys_syslog			__sys_ia32_syslog
 | 
			
		||||
104	i386	setitimer		sys_setitimer			__compat_sys_ia32_setitimer
 | 
			
		||||
105	i386	getitimer		sys_getitimer			__compat_sys_ia32_getitimer
 | 
			
		||||
106	i386	stat			sys_newstat			__compat_sys_ia32_newstat
 | 
			
		||||
107	i386	lstat			sys_newlstat			__compat_sys_ia32_newlstat
 | 
			
		||||
108	i386	fstat			sys_newfstat			__compat_sys_ia32_newfstat
 | 
			
		||||
109	i386	olduname		sys_uname			__sys_ia32_uname
 | 
			
		||||
110	i386	iopl			sys_iopl			__sys_ia32_iopl
 | 
			
		||||
111	i386	vhangup			sys_vhangup
 | 
			
		||||
112	i386	idle
 | 
			
		||||
113	i386	vm86old			sys_vm86old			sys_ni_syscall
 | 
			
		||||
114	i386	wait4			sys_wait4			compat_sys_wait4
 | 
			
		||||
115	i386	swapoff			sys_swapoff
 | 
			
		||||
116	i386	sysinfo			sys_sysinfo			compat_sys_sysinfo
 | 
			
		||||
117	i386	ipc			sys_ipc				compat_sys_ipc
 | 
			
		||||
118	i386	fsync			sys_fsync
 | 
			
		||||
114	i386	wait4			sys_wait4			__compat_sys_ia32_wait4
 | 
			
		||||
115	i386	swapoff			sys_swapoff			__sys_ia32_swapoff
 | 
			
		||||
116	i386	sysinfo			sys_sysinfo			__compat_sys_ia32_sysinfo
 | 
			
		||||
117	i386	ipc			sys_ipc				__compat_sys_ia32_ipc
 | 
			
		||||
118	i386	fsync			sys_fsync			__sys_ia32_fsync
 | 
			
		||||
119	i386	sigreturn		sys_sigreturn			sys32_sigreturn
 | 
			
		||||
120	i386	clone			sys_clone			compat_sys_x86_clone
 | 
			
		||||
121	i386	setdomainname		sys_setdomainname
 | 
			
		||||
122	i386	uname			sys_newuname
 | 
			
		||||
123	i386	modify_ldt		sys_modify_ldt
 | 
			
		||||
124	i386	adjtimex		sys_adjtimex			compat_sys_adjtimex
 | 
			
		||||
125	i386	mprotect		sys_mprotect
 | 
			
		||||
126	i386	sigprocmask		sys_sigprocmask			compat_sys_sigprocmask
 | 
			
		||||
120	i386	clone			sys_clone			__compat_sys_ia32_x86_clone
 | 
			
		||||
121	i386	setdomainname		sys_setdomainname		__sys_ia32_setdomainname
 | 
			
		||||
122	i386	uname			sys_newuname			__sys_ia32_newuname
 | 
			
		||||
123	i386	modify_ldt		sys_modify_ldt			__sys_ia32_modify_ldt
 | 
			
		||||
124	i386	adjtimex		sys_adjtimex			__compat_sys_ia32_adjtimex
 | 
			
		||||
125	i386	mprotect		sys_mprotect			__sys_ia32_mprotect
 | 
			
		||||
126	i386	sigprocmask		sys_sigprocmask			__compat_sys_ia32_sigprocmask
 | 
			
		||||
127	i386	create_module
 | 
			
		||||
128	i386	init_module		sys_init_module
 | 
			
		||||
129	i386	delete_module		sys_delete_module
 | 
			
		||||
128	i386	init_module		sys_init_module			__sys_ia32_init_module
 | 
			
		||||
129	i386	delete_module		sys_delete_module		__sys_ia32_delete_module
 | 
			
		||||
130	i386	get_kernel_syms
 | 
			
		||||
131	i386	quotactl		sys_quotactl			compat_sys_quotactl32
 | 
			
		||||
132	i386	getpgid			sys_getpgid
 | 
			
		||||
133	i386	fchdir			sys_fchdir
 | 
			
		||||
134	i386	bdflush			sys_bdflush
 | 
			
		||||
135	i386	sysfs			sys_sysfs
 | 
			
		||||
136	i386	personality		sys_personality
 | 
			
		||||
131	i386	quotactl		sys_quotactl			__compat_sys_ia32_quotactl32
 | 
			
		||||
132	i386	getpgid			sys_getpgid			__sys_ia32_getpgid
 | 
			
		||||
133	i386	fchdir			sys_fchdir			__sys_ia32_fchdir
 | 
			
		||||
134	i386	bdflush			sys_bdflush			__sys_ia32_bdflush
 | 
			
		||||
135	i386	sysfs			sys_sysfs			__sys_ia32_sysfs
 | 
			
		||||
136	i386	personality		sys_personality			__sys_ia32_personality
 | 
			
		||||
137	i386	afs_syscall
 | 
			
		||||
138	i386	setfsuid		sys_setfsuid16
 | 
			
		||||
139	i386	setfsgid		sys_setfsgid16
 | 
			
		||||
140	i386	_llseek			sys_llseek
 | 
			
		||||
141	i386	getdents		sys_getdents			compat_sys_getdents
 | 
			
		||||
142	i386	_newselect		sys_select			compat_sys_select
 | 
			
		||||
143	i386	flock			sys_flock
 | 
			
		||||
144	i386	msync			sys_msync
 | 
			
		||||
145	i386	readv			sys_readv			compat_sys_readv
 | 
			
		||||
146	i386	writev			sys_writev			compat_sys_writev
 | 
			
		||||
147	i386	getsid			sys_getsid
 | 
			
		||||
148	i386	fdatasync		sys_fdatasync
 | 
			
		||||
149	i386	_sysctl			sys_sysctl			compat_sys_sysctl
 | 
			
		||||
150	i386	mlock			sys_mlock
 | 
			
		||||
151	i386	munlock			sys_munlock
 | 
			
		||||
152	i386	mlockall		sys_mlockall
 | 
			
		||||
138	i386	setfsuid		sys_setfsuid16			__sys_ia32_setfsuid16
 | 
			
		||||
139	i386	setfsgid		sys_setfsgid16			__sys_ia32_setfsgid16
 | 
			
		||||
140	i386	_llseek			sys_llseek			__sys_ia32_llseek
 | 
			
		||||
141	i386	getdents		sys_getdents			__compat_sys_ia32_getdents
 | 
			
		||||
142	i386	_newselect		sys_select			__compat_sys_ia32_select
 | 
			
		||||
143	i386	flock			sys_flock			__sys_ia32_flock
 | 
			
		||||
144	i386	msync			sys_msync			__sys_ia32_msync
 | 
			
		||||
145	i386	readv			sys_readv			__compat_sys_ia32_readv
 | 
			
		||||
146	i386	writev			sys_writev			__compat_sys_ia32_writev
 | 
			
		||||
147	i386	getsid			sys_getsid			__sys_ia32_getsid
 | 
			
		||||
148	i386	fdatasync		sys_fdatasync			__sys_ia32_fdatasync
 | 
			
		||||
149	i386	_sysctl			sys_sysctl			__compat_sys_ia32_sysctl
 | 
			
		||||
150	i386	mlock			sys_mlock			__sys_ia32_mlock
 | 
			
		||||
151	i386	munlock			sys_munlock			__sys_ia32_munlock
 | 
			
		||||
152	i386	mlockall		sys_mlockall			__sys_ia32_mlockall
 | 
			
		||||
153	i386	munlockall		sys_munlockall
 | 
			
		||||
154	i386	sched_setparam		sys_sched_setparam
 | 
			
		||||
155	i386	sched_getparam		sys_sched_getparam
 | 
			
		||||
156	i386	sched_setscheduler	sys_sched_setscheduler
 | 
			
		||||
157	i386	sched_getscheduler	sys_sched_getscheduler
 | 
			
		||||
154	i386	sched_setparam		sys_sched_setparam		__sys_ia32_sched_setparam
 | 
			
		||||
155	i386	sched_getparam		sys_sched_getparam		__sys_ia32_sched_getparam
 | 
			
		||||
156	i386	sched_setscheduler	sys_sched_setscheduler		__sys_ia32_sched_setscheduler
 | 
			
		||||
157	i386	sched_getscheduler	sys_sched_getscheduler		__sys_ia32_sched_getscheduler
 | 
			
		||||
158	i386	sched_yield		sys_sched_yield
 | 
			
		||||
159	i386	sched_get_priority_max	sys_sched_get_priority_max
 | 
			
		||||
160	i386	sched_get_priority_min	sys_sched_get_priority_min
 | 
			
		||||
161	i386	sched_rr_get_interval	sys_sched_rr_get_interval	compat_sys_sched_rr_get_interval
 | 
			
		||||
162	i386	nanosleep		sys_nanosleep			compat_sys_nanosleep
 | 
			
		||||
163	i386	mremap			sys_mremap
 | 
			
		||||
164	i386	setresuid		sys_setresuid16
 | 
			
		||||
165	i386	getresuid		sys_getresuid16
 | 
			
		||||
159	i386	sched_get_priority_max	sys_sched_get_priority_max	__sys_ia32_sched_get_priority_max
 | 
			
		||||
160	i386	sched_get_priority_min	sys_sched_get_priority_min	__sys_ia32_sched_get_priority_min
 | 
			
		||||
161	i386	sched_rr_get_interval	sys_sched_rr_get_interval	__compat_sys_ia32_sched_rr_get_interval
 | 
			
		||||
162	i386	nanosleep		sys_nanosleep			__compat_sys_ia32_nanosleep
 | 
			
		||||
163	i386	mremap			sys_mremap			__sys_ia32_mremap
 | 
			
		||||
164	i386	setresuid		sys_setresuid16			__sys_ia32_setresuid16
 | 
			
		||||
165	i386	getresuid		sys_getresuid16			__sys_ia32_getresuid16
 | 
			
		||||
166	i386	vm86			sys_vm86			sys_ni_syscall
 | 
			
		||||
167	i386	query_module
 | 
			
		||||
168	i386	poll			sys_poll
 | 
			
		||||
168	i386	poll			sys_poll			__sys_ia32_poll
 | 
			
		||||
169	i386	nfsservctl
 | 
			
		||||
170	i386	setresgid		sys_setresgid16
 | 
			
		||||
171	i386	getresgid		sys_getresgid16
 | 
			
		||||
172	i386	prctl			sys_prctl
 | 
			
		||||
170	i386	setresgid		sys_setresgid16			__sys_ia32_setresgid16
 | 
			
		||||
171	i386	getresgid		sys_getresgid16			__sys_ia32_getresgid16
 | 
			
		||||
172	i386	prctl			sys_prctl			__sys_ia32_prctl
 | 
			
		||||
173	i386	rt_sigreturn		sys_rt_sigreturn		sys32_rt_sigreturn
 | 
			
		||||
174	i386	rt_sigaction		sys_rt_sigaction		compat_sys_rt_sigaction
 | 
			
		||||
175	i386	rt_sigprocmask		sys_rt_sigprocmask
 | 
			
		||||
176	i386	rt_sigpending		sys_rt_sigpending		compat_sys_rt_sigpending
 | 
			
		||||
177	i386	rt_sigtimedwait		sys_rt_sigtimedwait		compat_sys_rt_sigtimedwait
 | 
			
		||||
178	i386	rt_sigqueueinfo		sys_rt_sigqueueinfo		compat_sys_rt_sigqueueinfo
 | 
			
		||||
179	i386	rt_sigsuspend		sys_rt_sigsuspend
 | 
			
		||||
180	i386	pread64			sys_pread64			compat_sys_x86_pread
 | 
			
		||||
181	i386	pwrite64		sys_pwrite64			compat_sys_x86_pwrite
 | 
			
		||||
182	i386	chown			sys_chown16
 | 
			
		||||
183	i386	getcwd			sys_getcwd
 | 
			
		||||
184	i386	capget			sys_capget
 | 
			
		||||
185	i386	capset			sys_capset
 | 
			
		||||
186	i386	sigaltstack		sys_sigaltstack			compat_sys_sigaltstack
 | 
			
		||||
187	i386	sendfile		sys_sendfile			compat_sys_sendfile
 | 
			
		||||
174	i386	rt_sigaction		sys_rt_sigaction		__compat_sys_ia32_rt_sigaction
 | 
			
		||||
175	i386	rt_sigprocmask		sys_rt_sigprocmask		__sys_ia32_rt_sigprocmask
 | 
			
		||||
176	i386	rt_sigpending		sys_rt_sigpending		__compat_sys_ia32_rt_sigpending
 | 
			
		||||
177	i386	rt_sigtimedwait		sys_rt_sigtimedwait		__compat_sys_ia32_rt_sigtimedwait
 | 
			
		||||
178	i386	rt_sigqueueinfo		sys_rt_sigqueueinfo		__compat_sys_ia32_rt_sigqueueinfo
 | 
			
		||||
179	i386	rt_sigsuspend		sys_rt_sigsuspend		__sys_ia32_rt_sigsuspend
 | 
			
		||||
180	i386	pread64			sys_pread64			__compat_sys_ia32_x86_pread
 | 
			
		||||
181	i386	pwrite64		sys_pwrite64			__compat_sys_ia32_x86_pwrite
 | 
			
		||||
182	i386	chown			sys_chown16			__sys_ia32_chown16
 | 
			
		||||
183	i386	getcwd			sys_getcwd			__sys_ia32_getcwd
 | 
			
		||||
184	i386	capget			sys_capget			__sys_ia32_capget
 | 
			
		||||
185	i386	capset			sys_capset			__sys_ia32_capset
 | 
			
		||||
186	i386	sigaltstack		sys_sigaltstack			__compat_sys_ia32_sigaltstack
 | 
			
		||||
187	i386	sendfile		sys_sendfile			__compat_sys_ia32_sendfile
 | 
			
		||||
188	i386	getpmsg
 | 
			
		||||
189	i386	putpmsg
 | 
			
		||||
190	i386	vfork			sys_vfork
 | 
			
		||||
191	i386	ugetrlimit		sys_getrlimit			compat_sys_getrlimit
 | 
			
		||||
192	i386	mmap2			sys_mmap_pgoff
 | 
			
		||||
193	i386	truncate64		sys_truncate64			compat_sys_x86_truncate64
 | 
			
		||||
194	i386	ftruncate64		sys_ftruncate64			compat_sys_x86_ftruncate64
 | 
			
		||||
195	i386	stat64			sys_stat64			compat_sys_x86_stat64
 | 
			
		||||
196	i386	lstat64			sys_lstat64			compat_sys_x86_lstat64
 | 
			
		||||
197	i386	fstat64			sys_fstat64			compat_sys_x86_fstat64
 | 
			
		||||
198	i386	lchown32		sys_lchown
 | 
			
		||||
191	i386	ugetrlimit		sys_getrlimit			__compat_sys_ia32_getrlimit
 | 
			
		||||
192	i386	mmap2			sys_mmap_pgoff			__sys_ia32_mmap_pgoff
 | 
			
		||||
193	i386	truncate64		sys_truncate64			__compat_sys_ia32_x86_truncate64
 | 
			
		||||
194	i386	ftruncate64		sys_ftruncate64			__compat_sys_ia32_x86_ftruncate64
 | 
			
		||||
195	i386	stat64			sys_stat64			__compat_sys_ia32_x86_stat64
 | 
			
		||||
196	i386	lstat64			sys_lstat64			__compat_sys_ia32_x86_lstat64
 | 
			
		||||
197	i386	fstat64			sys_fstat64			__compat_sys_ia32_x86_fstat64
 | 
			
		||||
198	i386	lchown32		sys_lchown			__sys_ia32_lchown
 | 
			
		||||
199	i386	getuid32		sys_getuid
 | 
			
		||||
200	i386	getgid32		sys_getgid
 | 
			
		||||
201	i386	geteuid32		sys_geteuid
 | 
			
		||||
202	i386	getegid32		sys_getegid
 | 
			
		||||
203	i386	setreuid32		sys_setreuid
 | 
			
		||||
204	i386	setregid32		sys_setregid
 | 
			
		||||
205	i386	getgroups32		sys_getgroups
 | 
			
		||||
206	i386	setgroups32		sys_setgroups
 | 
			
		||||
207	i386	fchown32		sys_fchown
 | 
			
		||||
208	i386	setresuid32		sys_setresuid
 | 
			
		||||
209	i386	getresuid32		sys_getresuid
 | 
			
		||||
210	i386	setresgid32		sys_setresgid
 | 
			
		||||
211	i386	getresgid32		sys_getresgid
 | 
			
		||||
212	i386	chown32			sys_chown
 | 
			
		||||
213	i386	setuid32		sys_setuid
 | 
			
		||||
214	i386	setgid32		sys_setgid
 | 
			
		||||
215	i386	setfsuid32		sys_setfsuid
 | 
			
		||||
216	i386	setfsgid32		sys_setfsgid
 | 
			
		||||
217	i386	pivot_root		sys_pivot_root
 | 
			
		||||
218	i386	mincore			sys_mincore
 | 
			
		||||
219	i386	madvise			sys_madvise
 | 
			
		||||
220	i386	getdents64		sys_getdents64
 | 
			
		||||
221	i386	fcntl64			sys_fcntl64			compat_sys_fcntl64
 | 
			
		||||
203	i386	setreuid32		sys_setreuid			__sys_ia32_setreuid
 | 
			
		||||
204	i386	setregid32		sys_setregid			__sys_ia32_setregid
 | 
			
		||||
205	i386	getgroups32		sys_getgroups			__sys_ia32_getgroups
 | 
			
		||||
206	i386	setgroups32		sys_setgroups			__sys_ia32_setgroups
 | 
			
		||||
207	i386	fchown32		sys_fchown			__sys_ia32_fchown
 | 
			
		||||
208	i386	setresuid32		sys_setresuid			__sys_ia32_setresuid
 | 
			
		||||
209	i386	getresuid32		sys_getresuid			__sys_ia32_getresuid
 | 
			
		||||
210	i386	setresgid32		sys_setresgid			__sys_ia32_setresgid
 | 
			
		||||
211	i386	getresgid32		sys_getresgid			__sys_ia32_getresgid
 | 
			
		||||
212	i386	chown32			sys_chown			__sys_ia32_chown
 | 
			
		||||
213	i386	setuid32		sys_setuid			__sys_ia32_setuid
 | 
			
		||||
214	i386	setgid32		sys_setgid			__sys_ia32_setgid
 | 
			
		||||
215	i386	setfsuid32		sys_setfsuid			__sys_ia32_setfsuid
 | 
			
		||||
216	i386	setfsgid32		sys_setfsgid			__sys_ia32_setfsgid
 | 
			
		||||
217	i386	pivot_root		sys_pivot_root			__sys_ia32_pivot_root
 | 
			
		||||
218	i386	mincore			sys_mincore			__sys_ia32_mincore
 | 
			
		||||
219	i386	madvise			sys_madvise			__sys_ia32_madvise
 | 
			
		||||
220	i386	getdents64		sys_getdents64			__sys_ia32_getdents64
 | 
			
		||||
221	i386	fcntl64			sys_fcntl64			__compat_sys_ia32_fcntl64
 | 
			
		||||
# 222 is unused
 | 
			
		||||
# 223 is unused
 | 
			
		||||
224	i386	gettid			sys_gettid
 | 
			
		||||
225	i386	readahead		sys_readahead			compat_sys_x86_readahead
 | 
			
		||||
226	i386	setxattr		sys_setxattr
 | 
			
		||||
227	i386	lsetxattr		sys_lsetxattr
 | 
			
		||||
228	i386	fsetxattr		sys_fsetxattr
 | 
			
		||||
229	i386	getxattr		sys_getxattr
 | 
			
		||||
230	i386	lgetxattr		sys_lgetxattr
 | 
			
		||||
231	i386	fgetxattr		sys_fgetxattr
 | 
			
		||||
232	i386	listxattr		sys_listxattr
 | 
			
		||||
233	i386	llistxattr		sys_llistxattr
 | 
			
		||||
234	i386	flistxattr		sys_flistxattr
 | 
			
		||||
235	i386	removexattr		sys_removexattr
 | 
			
		||||
236	i386	lremovexattr		sys_lremovexattr
 | 
			
		||||
237	i386	fremovexattr		sys_fremovexattr
 | 
			
		||||
238	i386	tkill			sys_tkill
 | 
			
		||||
239	i386	sendfile64		sys_sendfile64
 | 
			
		||||
240	i386	futex			sys_futex			compat_sys_futex
 | 
			
		||||
241	i386	sched_setaffinity	sys_sched_setaffinity		compat_sys_sched_setaffinity
 | 
			
		||||
242	i386	sched_getaffinity	sys_sched_getaffinity		compat_sys_sched_getaffinity
 | 
			
		||||
243	i386	set_thread_area		sys_set_thread_area
 | 
			
		||||
244	i386	get_thread_area		sys_get_thread_area
 | 
			
		||||
245	i386	io_setup		sys_io_setup			compat_sys_io_setup
 | 
			
		||||
246	i386	io_destroy		sys_io_destroy
 | 
			
		||||
247	i386	io_getevents		sys_io_getevents		compat_sys_io_getevents
 | 
			
		||||
248	i386	io_submit		sys_io_submit			compat_sys_io_submit
 | 
			
		||||
249	i386	io_cancel		sys_io_cancel
 | 
			
		||||
250	i386	fadvise64		sys_fadvise64			compat_sys_x86_fadvise64
 | 
			
		||||
225	i386	readahead		sys_readahead			__compat_sys_ia32_x86_readahead
 | 
			
		||||
226	i386	setxattr		sys_setxattr			__sys_ia32_setxattr
 | 
			
		||||
227	i386	lsetxattr		sys_lsetxattr			__sys_ia32_lsetxattr
 | 
			
		||||
228	i386	fsetxattr		sys_fsetxattr			__sys_ia32_fsetxattr
 | 
			
		||||
229	i386	getxattr		sys_getxattr			__sys_ia32_getxattr
 | 
			
		||||
230	i386	lgetxattr		sys_lgetxattr			__sys_ia32_lgetxattr
 | 
			
		||||
231	i386	fgetxattr		sys_fgetxattr			__sys_ia32_fgetxattr
 | 
			
		||||
232	i386	listxattr		sys_listxattr			__sys_ia32_listxattr
 | 
			
		||||
233	i386	llistxattr		sys_llistxattr			__sys_ia32_llistxattr
 | 
			
		||||
234	i386	flistxattr		sys_flistxattr			__sys_ia32_flistxattr
 | 
			
		||||
235	i386	removexattr		sys_removexattr			__sys_ia32_removexattr
 | 
			
		||||
236	i386	lremovexattr		sys_lremovexattr		__sys_ia32_lremovexattr
 | 
			
		||||
237	i386	fremovexattr		sys_fremovexattr		__sys_ia32_fremovexattr
 | 
			
		||||
238	i386	tkill			sys_tkill			__sys_ia32_tkill
 | 
			
		||||
239	i386	sendfile64		sys_sendfile64			__sys_ia32_sendfile64
 | 
			
		||||
240	i386	futex			sys_futex			__compat_sys_ia32_futex
 | 
			
		||||
241	i386	sched_setaffinity	sys_sched_setaffinity		__compat_sys_ia32_sched_setaffinity
 | 
			
		||||
242	i386	sched_getaffinity	sys_sched_getaffinity		__compat_sys_ia32_sched_getaffinity
 | 
			
		||||
243	i386	set_thread_area		sys_set_thread_area		__sys_ia32_set_thread_area
 | 
			
		||||
244	i386	get_thread_area		sys_get_thread_area		__sys_ia32_get_thread_area
 | 
			
		||||
245	i386	io_setup		sys_io_setup			__compat_sys_ia32_io_setup
 | 
			
		||||
246	i386	io_destroy		sys_io_destroy			__sys_ia32_io_destroy
 | 
			
		||||
247	i386	io_getevents		sys_io_getevents		__compat_sys_ia32_io_getevents
 | 
			
		||||
248	i386	io_submit		sys_io_submit			__compat_sys_ia32_io_submit
 | 
			
		||||
249	i386	io_cancel		sys_io_cancel			__sys_ia32_io_cancel
 | 
			
		||||
250	i386	fadvise64		sys_fadvise64			__compat_sys_ia32_x86_fadvise64
 | 
			
		||||
# 251 is available for reuse (was briefly sys_set_zone_reclaim)
 | 
			
		||||
252	i386	exit_group		sys_exit_group
 | 
			
		||||
253	i386	lookup_dcookie		sys_lookup_dcookie		compat_sys_lookup_dcookie
 | 
			
		||||
254	i386	epoll_create		sys_epoll_create
 | 
			
		||||
255	i386	epoll_ctl		sys_epoll_ctl
 | 
			
		||||
256	i386	epoll_wait		sys_epoll_wait
 | 
			
		||||
257	i386	remap_file_pages	sys_remap_file_pages
 | 
			
		||||
258	i386	set_tid_address		sys_set_tid_address
 | 
			
		||||
259	i386	timer_create		sys_timer_create		compat_sys_timer_create
 | 
			
		||||
260	i386	timer_settime		sys_timer_settime		compat_sys_timer_settime
 | 
			
		||||
261	i386	timer_gettime		sys_timer_gettime		compat_sys_timer_gettime
 | 
			
		||||
262	i386	timer_getoverrun	sys_timer_getoverrun
 | 
			
		||||
263	i386	timer_delete		sys_timer_delete
 | 
			
		||||
264	i386	clock_settime		sys_clock_settime		compat_sys_clock_settime
 | 
			
		||||
265	i386	clock_gettime		sys_clock_gettime		compat_sys_clock_gettime
 | 
			
		||||
266	i386	clock_getres		sys_clock_getres		compat_sys_clock_getres
 | 
			
		||||
267	i386	clock_nanosleep		sys_clock_nanosleep		compat_sys_clock_nanosleep
 | 
			
		||||
268	i386	statfs64		sys_statfs64			compat_sys_statfs64
 | 
			
		||||
269	i386	fstatfs64		sys_fstatfs64			compat_sys_fstatfs64
 | 
			
		||||
270	i386	tgkill			sys_tgkill
 | 
			
		||||
271	i386	utimes			sys_utimes			compat_sys_utimes
 | 
			
		||||
272	i386	fadvise64_64		sys_fadvise64_64		compat_sys_x86_fadvise64_64
 | 
			
		||||
252	i386	exit_group		sys_exit_group			__sys_ia32_exit_group
 | 
			
		||||
253	i386	lookup_dcookie		sys_lookup_dcookie		__compat_sys_ia32_lookup_dcookie
 | 
			
		||||
254	i386	epoll_create		sys_epoll_create		__sys_ia32_epoll_create
 | 
			
		||||
255	i386	epoll_ctl		sys_epoll_ctl			__sys_ia32_epoll_ctl
 | 
			
		||||
256	i386	epoll_wait		sys_epoll_wait			__sys_ia32_epoll_wait
 | 
			
		||||
257	i386	remap_file_pages	sys_remap_file_pages		__sys_ia32_remap_file_pages
 | 
			
		||||
258	i386	set_tid_address		sys_set_tid_address		__sys_ia32_set_tid_address
 | 
			
		||||
259	i386	timer_create		sys_timer_create		__compat_sys_ia32_timer_create
 | 
			
		||||
260	i386	timer_settime		sys_timer_settime		__compat_sys_ia32_timer_settime
 | 
			
		||||
261	i386	timer_gettime		sys_timer_gettime		__compat_sys_ia32_timer_gettime
 | 
			
		||||
262	i386	timer_getoverrun	sys_timer_getoverrun		__sys_ia32_timer_getoverrun
 | 
			
		||||
263	i386	timer_delete		sys_timer_delete		__sys_ia32_timer_delete
 | 
			
		||||
264	i386	clock_settime		sys_clock_settime		__compat_sys_ia32_clock_settime
 | 
			
		||||
265	i386	clock_gettime		sys_clock_gettime		__compat_sys_ia32_clock_gettime
 | 
			
		||||
266	i386	clock_getres		sys_clock_getres		__compat_sys_ia32_clock_getres
 | 
			
		||||
267	i386	clock_nanosleep		sys_clock_nanosleep		__compat_sys_ia32_clock_nanosleep
 | 
			
		||||
268	i386	statfs64		sys_statfs64			__compat_sys_ia32_statfs64
 | 
			
		||||
269	i386	fstatfs64		sys_fstatfs64			__compat_sys_ia32_fstatfs64
 | 
			
		||||
270	i386	tgkill			sys_tgkill			__sys_ia32_tgkill
 | 
			
		||||
271	i386	utimes			sys_utimes			__compat_sys_ia32_utimes
 | 
			
		||||
272	i386	fadvise64_64		sys_fadvise64_64		__compat_sys_ia32_x86_fadvise64_64
 | 
			
		||||
273	i386	vserver
 | 
			
		||||
274	i386	mbind			sys_mbind
 | 
			
		||||
275	i386	get_mempolicy		sys_get_mempolicy		compat_sys_get_mempolicy
 | 
			
		||||
276	i386	set_mempolicy		sys_set_mempolicy
 | 
			
		||||
277	i386	mq_open			sys_mq_open			compat_sys_mq_open
 | 
			
		||||
278	i386	mq_unlink		sys_mq_unlink
 | 
			
		||||
279	i386	mq_timedsend		sys_mq_timedsend		compat_sys_mq_timedsend
 | 
			
		||||
280	i386	mq_timedreceive		sys_mq_timedreceive		compat_sys_mq_timedreceive
 | 
			
		||||
281	i386	mq_notify		sys_mq_notify			compat_sys_mq_notify
 | 
			
		||||
282	i386	mq_getsetattr		sys_mq_getsetattr		compat_sys_mq_getsetattr
 | 
			
		||||
283	i386	kexec_load		sys_kexec_load			compat_sys_kexec_load
 | 
			
		||||
284	i386	waitid			sys_waitid			compat_sys_waitid
 | 
			
		||||
274	i386	mbind			sys_mbind			__sys_ia32_mbind
 | 
			
		||||
275	i386	get_mempolicy		sys_get_mempolicy		__compat_sys_ia32_get_mempolicy
 | 
			
		||||
276	i386	set_mempolicy		sys_set_mempolicy		__sys_ia32_set_mempolicy
 | 
			
		||||
277	i386	mq_open			sys_mq_open			__compat_sys_ia32_mq_open
 | 
			
		||||
278	i386	mq_unlink		sys_mq_unlink			__sys_ia32_mq_unlink
 | 
			
		||||
279	i386	mq_timedsend		sys_mq_timedsend		__compat_sys_ia32_mq_timedsend
 | 
			
		||||
280	i386	mq_timedreceive		sys_mq_timedreceive		__compat_sys_ia32_mq_timedreceive
 | 
			
		||||
281	i386	mq_notify		sys_mq_notify			__compat_sys_ia32_mq_notify
 | 
			
		||||
282	i386	mq_getsetattr		sys_mq_getsetattr		__compat_sys_ia32_mq_getsetattr
 | 
			
		||||
283	i386	kexec_load		sys_kexec_load			__compat_sys_ia32_kexec_load
 | 
			
		||||
284	i386	waitid			sys_waitid			__compat_sys_ia32_waitid
 | 
			
		||||
# 285 sys_setaltroot
 | 
			
		||||
286	i386	add_key			sys_add_key
 | 
			
		||||
287	i386	request_key		sys_request_key
 | 
			
		||||
288	i386	keyctl			sys_keyctl			compat_sys_keyctl
 | 
			
		||||
289	i386	ioprio_set		sys_ioprio_set
 | 
			
		||||
290	i386	ioprio_get		sys_ioprio_get
 | 
			
		||||
286	i386	add_key			sys_add_key			__sys_ia32_add_key
 | 
			
		||||
287	i386	request_key		sys_request_key			__sys_ia32_request_key
 | 
			
		||||
288	i386	keyctl			sys_keyctl			__compat_sys_ia32_keyctl
 | 
			
		||||
289	i386	ioprio_set		sys_ioprio_set			__sys_ia32_ioprio_set
 | 
			
		||||
290	i386	ioprio_get		sys_ioprio_get			__sys_ia32_ioprio_get
 | 
			
		||||
291	i386	inotify_init		sys_inotify_init
 | 
			
		||||
292	i386	inotify_add_watch	sys_inotify_add_watch
 | 
			
		||||
293	i386	inotify_rm_watch	sys_inotify_rm_watch
 | 
			
		||||
294	i386	migrate_pages		sys_migrate_pages
 | 
			
		||||
295	i386	openat			sys_openat			compat_sys_openat
 | 
			
		||||
296	i386	mkdirat			sys_mkdirat
 | 
			
		||||
297	i386	mknodat			sys_mknodat
 | 
			
		||||
298	i386	fchownat		sys_fchownat
 | 
			
		||||
299	i386	futimesat		sys_futimesat			compat_sys_futimesat
 | 
			
		||||
300	i386	fstatat64		sys_fstatat64			compat_sys_x86_fstatat
 | 
			
		||||
301	i386	unlinkat		sys_unlinkat
 | 
			
		||||
302	i386	renameat		sys_renameat
 | 
			
		||||
303	i386	linkat			sys_linkat
 | 
			
		||||
304	i386	symlinkat		sys_symlinkat
 | 
			
		||||
305	i386	readlinkat		sys_readlinkat
 | 
			
		||||
306	i386	fchmodat		sys_fchmodat
 | 
			
		||||
307	i386	faccessat		sys_faccessat
 | 
			
		||||
308	i386	pselect6		sys_pselect6			compat_sys_pselect6
 | 
			
		||||
309	i386	ppoll			sys_ppoll			compat_sys_ppoll
 | 
			
		||||
310	i386	unshare			sys_unshare
 | 
			
		||||
311	i386	set_robust_list		sys_set_robust_list		compat_sys_set_robust_list
 | 
			
		||||
312	i386	get_robust_list		sys_get_robust_list		compat_sys_get_robust_list
 | 
			
		||||
313	i386	splice			sys_splice
 | 
			
		||||
314	i386	sync_file_range		sys_sync_file_range		compat_sys_x86_sync_file_range
 | 
			
		||||
315	i386	tee			sys_tee
 | 
			
		||||
316	i386	vmsplice		sys_vmsplice			compat_sys_vmsplice
 | 
			
		||||
317	i386	move_pages		sys_move_pages			compat_sys_move_pages
 | 
			
		||||
318	i386	getcpu			sys_getcpu
 | 
			
		||||
319	i386	epoll_pwait		sys_epoll_pwait
 | 
			
		||||
320	i386	utimensat		sys_utimensat			compat_sys_utimensat
 | 
			
		||||
321	i386	signalfd		sys_signalfd			compat_sys_signalfd
 | 
			
		||||
322	i386	timerfd_create		sys_timerfd_create
 | 
			
		||||
323	i386	eventfd			sys_eventfd
 | 
			
		||||
324	i386	fallocate		sys_fallocate			compat_sys_x86_fallocate
 | 
			
		||||
325	i386	timerfd_settime		sys_timerfd_settime		compat_sys_timerfd_settime
 | 
			
		||||
326	i386	timerfd_gettime		sys_timerfd_gettime		compat_sys_timerfd_gettime
 | 
			
		||||
327	i386	signalfd4		sys_signalfd4			compat_sys_signalfd4
 | 
			
		||||
328	i386	eventfd2		sys_eventfd2
 | 
			
		||||
329	i386	epoll_create1		sys_epoll_create1
 | 
			
		||||
330	i386	dup3			sys_dup3
 | 
			
		||||
331	i386	pipe2			sys_pipe2
 | 
			
		||||
332	i386	inotify_init1		sys_inotify_init1
 | 
			
		||||
333	i386	preadv			sys_preadv			compat_sys_preadv
 | 
			
		||||
334	i386	pwritev			sys_pwritev			compat_sys_pwritev
 | 
			
		||||
335	i386	rt_tgsigqueueinfo	sys_rt_tgsigqueueinfo		compat_sys_rt_tgsigqueueinfo
 | 
			
		||||
336	i386	perf_event_open		sys_perf_event_open
 | 
			
		||||
337	i386	recvmmsg		sys_recvmmsg			compat_sys_recvmmsg
 | 
			
		||||
338	i386	fanotify_init		sys_fanotify_init
 | 
			
		||||
339	i386	fanotify_mark		sys_fanotify_mark		compat_sys_fanotify_mark
 | 
			
		||||
340	i386	prlimit64		sys_prlimit64
 | 
			
		||||
341	i386	name_to_handle_at	sys_name_to_handle_at
 | 
			
		||||
342	i386	open_by_handle_at	sys_open_by_handle_at		compat_sys_open_by_handle_at
 | 
			
		||||
343	i386	clock_adjtime		sys_clock_adjtime		compat_sys_clock_adjtime
 | 
			
		||||
344	i386	syncfs			sys_syncfs
 | 
			
		||||
345	i386	sendmmsg		sys_sendmmsg			compat_sys_sendmmsg
 | 
			
		||||
346	i386	setns			sys_setns
 | 
			
		||||
347	i386	process_vm_readv	sys_process_vm_readv		compat_sys_process_vm_readv
 | 
			
		||||
348	i386	process_vm_writev	sys_process_vm_writev		compat_sys_process_vm_writev
 | 
			
		||||
349	i386	kcmp			sys_kcmp
 | 
			
		||||
350	i386	finit_module		sys_finit_module
 | 
			
		||||
351	i386	sched_setattr		sys_sched_setattr
 | 
			
		||||
352	i386	sched_getattr		sys_sched_getattr
 | 
			
		||||
353	i386	renameat2		sys_renameat2
 | 
			
		||||
354	i386	seccomp			sys_seccomp
 | 
			
		||||
355	i386	getrandom		sys_getrandom
 | 
			
		||||
356	i386	memfd_create		sys_memfd_create
 | 
			
		||||
357	i386	bpf			sys_bpf
 | 
			
		||||
358	i386	execveat		sys_execveat			compat_sys_execveat
 | 
			
		||||
359	i386	socket			sys_socket
 | 
			
		||||
360	i386	socketpair		sys_socketpair
 | 
			
		||||
361	i386	bind			sys_bind
 | 
			
		||||
362	i386	connect			sys_connect
 | 
			
		||||
363	i386	listen			sys_listen
 | 
			
		||||
364	i386	accept4			sys_accept4
 | 
			
		||||
365	i386	getsockopt		sys_getsockopt			compat_sys_getsockopt
 | 
			
		||||
366	i386	setsockopt		sys_setsockopt			compat_sys_setsockopt
 | 
			
		||||
367	i386	getsockname		sys_getsockname
 | 
			
		||||
368	i386	getpeername		sys_getpeername
 | 
			
		||||
369	i386	sendto			sys_sendto
 | 
			
		||||
370	i386	sendmsg			sys_sendmsg			compat_sys_sendmsg
 | 
			
		||||
371	i386	recvfrom		sys_recvfrom			compat_sys_recvfrom
 | 
			
		||||
372	i386	recvmsg			sys_recvmsg			compat_sys_recvmsg
 | 
			
		||||
373	i386	shutdown		sys_shutdown
 | 
			
		||||
374	i386	userfaultfd		sys_userfaultfd
 | 
			
		||||
375	i386	membarrier		sys_membarrier
 | 
			
		||||
376	i386	mlock2			sys_mlock2
 | 
			
		||||
377	i386	copy_file_range		sys_copy_file_range
 | 
			
		||||
378	i386	preadv2			sys_preadv2			compat_sys_preadv2
 | 
			
		||||
379	i386	pwritev2		sys_pwritev2			compat_sys_pwritev2
 | 
			
		||||
380	i386	pkey_mprotect		sys_pkey_mprotect
 | 
			
		||||
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
 | 
			
		||||
292	i386	inotify_add_watch	sys_inotify_add_watch		__sys_ia32_inotify_add_watch
 | 
			
		||||
293	i386	inotify_rm_watch	sys_inotify_rm_watch		__sys_ia32_inotify_rm_watch
 | 
			
		||||
294	i386	migrate_pages		sys_migrate_pages		__sys_ia32_migrate_pages
 | 
			
		||||
295	i386	openat			sys_openat			__compat_sys_ia32_openat
 | 
			
		||||
296	i386	mkdirat			sys_mkdirat			__sys_ia32_mkdirat
 | 
			
		||||
297	i386	mknodat			sys_mknodat			__sys_ia32_mknodat
 | 
			
		||||
298	i386	fchownat		sys_fchownat			__sys_ia32_fchownat
 | 
			
		||||
299	i386	futimesat		sys_futimesat			__compat_sys_ia32_futimesat
 | 
			
		||||
300	i386	fstatat64		sys_fstatat64			__compat_sys_ia32_x86_fstatat
 | 
			
		||||
301	i386	unlinkat		sys_unlinkat			__sys_ia32_unlinkat
 | 
			
		||||
302	i386	renameat		sys_renameat			__sys_ia32_renameat
 | 
			
		||||
303	i386	linkat			sys_linkat			__sys_ia32_linkat
 | 
			
		||||
304	i386	symlinkat		sys_symlinkat			__sys_ia32_symlinkat
 | 
			
		||||
305	i386	readlinkat		sys_readlinkat			__sys_ia32_readlinkat
 | 
			
		||||
306	i386	fchmodat		sys_fchmodat			__sys_ia32_fchmodat
 | 
			
		||||
307	i386	faccessat		sys_faccessat			__sys_ia32_faccessat
 | 
			
		||||
308	i386	pselect6		sys_pselect6			__compat_sys_ia32_pselect6
 | 
			
		||||
309	i386	ppoll			sys_ppoll			__compat_sys_ia32_ppoll
 | 
			
		||||
310	i386	unshare			sys_unshare			__sys_ia32_unshare
 | 
			
		||||
311	i386	set_robust_list		sys_set_robust_list		__compat_sys_ia32_set_robust_list
 | 
			
		||||
312	i386	get_robust_list		sys_get_robust_list		__compat_sys_ia32_get_robust_list
 | 
			
		||||
313	i386	splice			sys_splice			__sys_ia32_splice
 | 
			
		||||
314	i386	sync_file_range		sys_sync_file_range		__compat_sys_ia32_x86_sync_file_range
 | 
			
		||||
315	i386	tee			sys_tee				__sys_ia32_tee
 | 
			
		||||
316	i386	vmsplice		sys_vmsplice			__compat_sys_ia32_vmsplice
 | 
			
		||||
317	i386	move_pages		sys_move_pages			__compat_sys_ia32_move_pages
 | 
			
		||||
318	i386	getcpu			sys_getcpu			__sys_ia32_getcpu
 | 
			
		||||
319	i386	epoll_pwait		sys_epoll_pwait			__sys_ia32_epoll_pwait
 | 
			
		||||
320	i386	utimensat		sys_utimensat			__compat_sys_ia32_utimensat
 | 
			
		||||
321	i386	signalfd		sys_signalfd			__compat_sys_ia32_signalfd
 | 
			
		||||
322	i386	timerfd_create		sys_timerfd_create		__sys_ia32_timerfd_create
 | 
			
		||||
323	i386	eventfd			sys_eventfd			__sys_ia32_eventfd
 | 
			
		||||
324	i386	fallocate		sys_fallocate			__compat_sys_ia32_x86_fallocate
 | 
			
		||||
325	i386	timerfd_settime		sys_timerfd_settime		__compat_sys_ia32_timerfd_settime
 | 
			
		||||
326	i386	timerfd_gettime		sys_timerfd_gettime		__compat_sys_ia32_timerfd_gettime
 | 
			
		||||
327	i386	signalfd4		sys_signalfd4			__compat_sys_ia32_signalfd4
 | 
			
		||||
328	i386	eventfd2		sys_eventfd2			__sys_ia32_eventfd2
 | 
			
		||||
329	i386	epoll_create1		sys_epoll_create1		__sys_ia32_epoll_create1
 | 
			
		||||
330	i386	dup3			sys_dup3			__sys_ia32_dup3
 | 
			
		||||
331	i386	pipe2			sys_pipe2			__sys_ia32_pipe2
 | 
			
		||||
332	i386	inotify_init1		sys_inotify_init1		__sys_ia32_inotify_init1
 | 
			
		||||
333	i386	preadv			sys_preadv			__compat_sys_ia32_preadv
 | 
			
		||||
334	i386	pwritev			sys_pwritev			__compat_sys_ia32_pwritev
 | 
			
		||||
335	i386	rt_tgsigqueueinfo	sys_rt_tgsigqueueinfo		__compat_sys_ia32_rt_tgsigqueueinfo
 | 
			
		||||
336	i386	perf_event_open		sys_perf_event_open		__sys_ia32_perf_event_open
 | 
			
		||||
337	i386	recvmmsg		sys_recvmmsg			__compat_sys_ia32_recvmmsg
 | 
			
		||||
338	i386	fanotify_init		sys_fanotify_init		__sys_ia32_fanotify_init
 | 
			
		||||
339	i386	fanotify_mark		sys_fanotify_mark		__compat_sys_ia32_fanotify_mark
 | 
			
		||||
340	i386	prlimit64		sys_prlimit64			__sys_ia32_prlimit64
 | 
			
		||||
341	i386	name_to_handle_at	sys_name_to_handle_at		__sys_ia32_name_to_handle_at
 | 
			
		||||
342	i386	open_by_handle_at	sys_open_by_handle_at		__compat_sys_ia32_open_by_handle_at
 | 
			
		||||
343	i386	clock_adjtime		sys_clock_adjtime		__compat_sys_ia32_clock_adjtime
 | 
			
		||||
344	i386	syncfs			sys_syncfs			__sys_ia32_syncfs
 | 
			
		||||
345	i386	sendmmsg		sys_sendmmsg			__compat_sys_ia32_sendmmsg
 | 
			
		||||
346	i386	setns			sys_setns			__sys_ia32_setns
 | 
			
		||||
347	i386	process_vm_readv	sys_process_vm_readv		__compat_sys_ia32_process_vm_readv
 | 
			
		||||
348	i386	process_vm_writev	sys_process_vm_writev		__compat_sys_ia32_process_vm_writev
 | 
			
		||||
349	i386	kcmp			sys_kcmp			__sys_ia32_kcmp
 | 
			
		||||
350	i386	finit_module		sys_finit_module		__sys_ia32_finit_module
 | 
			
		||||
351	i386	sched_setattr		sys_sched_setattr		__sys_ia32_sched_setattr
 | 
			
		||||
352	i386	sched_getattr		sys_sched_getattr		__sys_ia32_sched_getattr
 | 
			
		||||
353	i386	renameat2		sys_renameat2			__sys_ia32_renameat2
 | 
			
		||||
354	i386	seccomp			sys_seccomp			__sys_ia32_seccomp
 | 
			
		||||
355	i386	getrandom		sys_getrandom			__sys_ia32_getrandom
 | 
			
		||||
356	i386	memfd_create		sys_memfd_create		__sys_ia32_memfd_create
 | 
			
		||||
357	i386	bpf			sys_bpf				__sys_ia32_bpf
 | 
			
		||||
358	i386	execveat		sys_execveat			__compat_sys_ia32_execveat
 | 
			
		||||
359	i386	socket			sys_socket			__sys_ia32_socket
 | 
			
		||||
360	i386	socketpair		sys_socketpair			__sys_ia32_socketpair
 | 
			
		||||
361	i386	bind			sys_bind			__sys_ia32_bind
 | 
			
		||||
362	i386	connect			sys_connect			__sys_ia32_connect
 | 
			
		||||
363	i386	listen			sys_listen			__sys_ia32_listen
 | 
			
		||||
364	i386	accept4			sys_accept4			__sys_ia32_accept4
 | 
			
		||||
365	i386	getsockopt		sys_getsockopt			__compat_sys_ia32_getsockopt
 | 
			
		||||
366	i386	setsockopt		sys_setsockopt			__compat_sys_ia32_setsockopt
 | 
			
		||||
367	i386	getsockname		sys_getsockname			__sys_ia32_getsockname
 | 
			
		||||
368	i386	getpeername		sys_getpeername			__sys_ia32_getpeername
 | 
			
		||||
369	i386	sendto			sys_sendto			__sys_ia32_sendto
 | 
			
		||||
370	i386	sendmsg			sys_sendmsg			__compat_sys_ia32_sendmsg
 | 
			
		||||
371	i386	recvfrom		sys_recvfrom			__compat_sys_ia32_recvfrom
 | 
			
		||||
372	i386	recvmsg			sys_recvmsg			__compat_sys_ia32_recvmsg
 | 
			
		||||
373	i386	shutdown		sys_shutdown			__sys_ia32_shutdown
 | 
			
		||||
374	i386	userfaultfd		sys_userfaultfd			__sys_ia32_userfaultfd
 | 
			
		||||
375	i386	membarrier		sys_membarrier			__sys_ia32_membarrier
 | 
			
		||||
376	i386	mlock2			sys_mlock2			__sys_ia32_mlock2
 | 
			
		||||
377	i386	copy_file_range		sys_copy_file_range		__sys_ia32_copy_file_range
 | 
			
		||||
378	i386	preadv2			sys_preadv2			__compat_sys_ia32_preadv2
 | 
			
		||||
379	i386	pwritev2		sys_pwritev2			__compat_sys_ia32_pwritev2
 | 
			
		||||
380	i386	pkey_mprotect		sys_pkey_mprotect		__sys_ia32_pkey_mprotect
 | 
			
		||||
381	i386	pkey_alloc		sys_pkey_alloc			__sys_ia32_pkey_alloc
 | 
			
		||||
382	i386	pkey_free		sys_pkey_free			__sys_ia32_pkey_free
 | 
			
		||||
383	i386	statx			sys_statx			__sys_ia32_statx
 | 
			
		||||
384	i386	arch_prctl		sys_arch_prctl			__compat_sys_ia32_arch_prctl
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -342,41 +342,43 @@
 | 
			
		|||
 | 
			
		||||
#
 | 
			
		||||
# x32-specific system call numbers start at 512 to avoid cache impact
 | 
			
		||||
# for native 64-bit operation.
 | 
			
		||||
# for native 64-bit operation. The __compat_sys_x32 stubs are created
 | 
			
		||||
# on-the-fly for compat_sys_*() compatibility system calls if X86_X32
 | 
			
		||||
# is defined.
 | 
			
		||||
#
 | 
			
		||||
512	x32	rt_sigaction		compat_sys_rt_sigaction
 | 
			
		||||
512	x32	rt_sigaction		__compat_sys_x32_rt_sigaction
 | 
			
		||||
513	x32	rt_sigreturn		sys32_x32_rt_sigreturn
 | 
			
		||||
514	x32	ioctl			compat_sys_ioctl
 | 
			
		||||
515	x32	readv			compat_sys_readv
 | 
			
		||||
516	x32	writev			compat_sys_writev
 | 
			
		||||
517	x32	recvfrom		compat_sys_recvfrom
 | 
			
		||||
518	x32	sendmsg			compat_sys_sendmsg
 | 
			
		||||
519	x32	recvmsg			compat_sys_recvmsg
 | 
			
		||||
520	x32	execve			compat_sys_execve/ptregs
 | 
			
		||||
521	x32	ptrace			compat_sys_ptrace
 | 
			
		||||
522	x32	rt_sigpending		compat_sys_rt_sigpending
 | 
			
		||||
523	x32	rt_sigtimedwait		compat_sys_rt_sigtimedwait
 | 
			
		||||
524	x32	rt_sigqueueinfo		compat_sys_rt_sigqueueinfo
 | 
			
		||||
525	x32	sigaltstack		compat_sys_sigaltstack
 | 
			
		||||
526	x32	timer_create		compat_sys_timer_create
 | 
			
		||||
527	x32	mq_notify		compat_sys_mq_notify
 | 
			
		||||
528	x32	kexec_load		compat_sys_kexec_load
 | 
			
		||||
529	x32	waitid			compat_sys_waitid
 | 
			
		||||
530	x32	set_robust_list		compat_sys_set_robust_list
 | 
			
		||||
531	x32	get_robust_list		compat_sys_get_robust_list
 | 
			
		||||
532	x32	vmsplice		compat_sys_vmsplice
 | 
			
		||||
533	x32	move_pages		compat_sys_move_pages
 | 
			
		||||
534	x32	preadv			compat_sys_preadv64
 | 
			
		||||
535	x32	pwritev			compat_sys_pwritev64
 | 
			
		||||
536	x32	rt_tgsigqueueinfo	compat_sys_rt_tgsigqueueinfo
 | 
			
		||||
537	x32	recvmmsg		compat_sys_recvmmsg
 | 
			
		||||
538	x32	sendmmsg		compat_sys_sendmmsg
 | 
			
		||||
539	x32	process_vm_readv	compat_sys_process_vm_readv
 | 
			
		||||
540	x32	process_vm_writev	compat_sys_process_vm_writev
 | 
			
		||||
541	x32	setsockopt		compat_sys_setsockopt
 | 
			
		||||
542	x32	getsockopt		compat_sys_getsockopt
 | 
			
		||||
543	x32	io_setup		compat_sys_io_setup
 | 
			
		||||
544	x32	io_submit		compat_sys_io_submit
 | 
			
		||||
545	x32	execveat		compat_sys_execveat/ptregs
 | 
			
		||||
546	x32	preadv2			compat_sys_preadv64v2
 | 
			
		||||
547	x32	pwritev2		compat_sys_pwritev64v2
 | 
			
		||||
514	x32	ioctl			__compat_sys_x32_ioctl
 | 
			
		||||
515	x32	readv			__compat_sys_x32_readv
 | 
			
		||||
516	x32	writev			__compat_sys_x32_writev
 | 
			
		||||
517	x32	recvfrom		__compat_sys_x32_recvfrom
 | 
			
		||||
518	x32	sendmsg			__compat_sys_x32_sendmsg
 | 
			
		||||
519	x32	recvmsg			__compat_sys_x32_recvmsg
 | 
			
		||||
520	x32	execve			__compat_sys_x32_execve/ptregs
 | 
			
		||||
521	x32	ptrace			__compat_sys_x32_ptrace
 | 
			
		||||
522	x32	rt_sigpending		__compat_sys_x32_rt_sigpending
 | 
			
		||||
523	x32	rt_sigtimedwait		__compat_sys_x32_rt_sigtimedwait
 | 
			
		||||
524	x32	rt_sigqueueinfo		__compat_sys_x32_rt_sigqueueinfo
 | 
			
		||||
525	x32	sigaltstack		__compat_sys_x32_sigaltstack
 | 
			
		||||
526	x32	timer_create		__compat_sys_x32_timer_create
 | 
			
		||||
527	x32	mq_notify		__compat_sys_x32_mq_notify
 | 
			
		||||
528	x32	kexec_load		__compat_sys_x32_kexec_load
 | 
			
		||||
529	x32	waitid			__compat_sys_x32_waitid
 | 
			
		||||
530	x32	set_robust_list		__compat_sys_x32_set_robust_list
 | 
			
		||||
531	x32	get_robust_list		__compat_sys_x32_get_robust_list
 | 
			
		||||
532	x32	vmsplice		__compat_sys_x32_vmsplice
 | 
			
		||||
533	x32	move_pages		__compat_sys_x32_move_pages
 | 
			
		||||
534	x32	preadv			__compat_sys_x32_preadv64
 | 
			
		||||
535	x32	pwritev			__compat_sys_x32_pwritev64
 | 
			
		||||
536	x32	rt_tgsigqueueinfo	__compat_sys_x32_rt_tgsigqueueinfo
 | 
			
		||||
537	x32	recvmmsg		__compat_sys_x32_recvmmsg
 | 
			
		||||
538	x32	sendmmsg		__compat_sys_x32_sendmmsg
 | 
			
		||||
539	x32	process_vm_readv	__compat_sys_x32_process_vm_readv
 | 
			
		||||
540	x32	process_vm_writev	__compat_sys_x32_process_vm_writev
 | 
			
		||||
541	x32	setsockopt		__compat_sys_x32_setsockopt
 | 
			
		||||
542	x32	getsockopt		__compat_sys_x32_getsockopt
 | 
			
		||||
543	x32	io_setup		__compat_sys_x32_io_setup
 | 
			
		||||
544	x32	io_submit		__compat_sys_x32_io_submit
 | 
			
		||||
545	x32	execveat		__compat_sys_x32_execveat/ptregs
 | 
			
		||||
546	x32	preadv2			__compat_sys_x32_preadv64v2
 | 
			
		||||
547	x32	pwritev2		__compat_sys_x32_pwritev64v2
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,111 @@
 | 
			
		|||
#ifndef _ASM_X86_SYSCALL_WRAPPER_H
 | 
			
		||||
#define _ASM_X86_SYSCALL_WRAPPER_H
 | 
			
		||||
 | 
			
		||||
/* Mapping of registers to parameters for syscalls on x86-64 and x32 */
 | 
			
		||||
#define SC_X86_64_REGS_TO_ARGS(x, ...)					\
 | 
			
		||||
	__MAP(x,__SC_ARGS						\
 | 
			
		||||
		,,regs->di,,regs->si,,regs->dx				\
 | 
			
		||||
		,,regs->r10,,regs->r8,,regs->r9)			\
 | 
			
		||||
 | 
			
		||||
/* Mapping of registers to parameters for syscalls on i386 */
 | 
			
		||||
#define SC_IA32_REGS_TO_ARGS(x, ...)					\
 | 
			
		||||
	__MAP(x,__SC_ARGS						\
 | 
			
		||||
	      ,,(unsigned int)regs->bx,,(unsigned int)regs->cx		\
 | 
			
		||||
	      ,,(unsigned int)regs->dx,,(unsigned int)regs->si		\
 | 
			
		||||
	      ,,(unsigned int)regs->di,,(unsigned int)regs->bp)
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_IA32_EMULATION
 | 
			
		||||
/*
 | 
			
		||||
 * For IA32 emulation, we need to handle "compat" syscalls *and* create
 | 
			
		||||
 * additional wrappers (aptly named __sys_ia32_sys_xyzzy) which decode the
 | 
			
		||||
 * ia32 regs in the proper order for shared or "common" syscalls. As some
 | 
			
		||||
 * syscalls may not be implemented, we need to expand COND_SYSCALL in
 | 
			
		||||
 * kernel/sys_ni.c and SYS_NI in kernel/time/posix-stubs.c to cover this
 | 
			
		||||
 * case as well.
 | 
			
		||||
 */
 | 
			
		||||
#define COMPAT_SC_IA32_STUBx(x, name, ...)				\
 | 
			
		||||
	asmlinkage long __compat_sys_ia32##name(const struct pt_regs *regs);\
 | 
			
		||||
	ALLOW_ERROR_INJECTION(__compat_sys_ia32##name, ERRNO);		\
 | 
			
		||||
	asmlinkage long __compat_sys_ia32##name(const struct pt_regs *regs)\
 | 
			
		||||
	{								\
 | 
			
		||||
		return c_SyS##name(SC_IA32_REGS_TO_ARGS(x,__VA_ARGS__));\
 | 
			
		||||
	}								\
 | 
			
		||||
 | 
			
		||||
#define SC_IA32_WRAPPERx(x, name, ...)					\
 | 
			
		||||
	asmlinkage long __sys_ia32##name(const struct pt_regs *regs);	\
 | 
			
		||||
	ALLOW_ERROR_INJECTION(__sys_ia32##name, ERRNO);			\
 | 
			
		||||
	asmlinkage long __sys_ia32##name(const struct pt_regs *regs)	\
 | 
			
		||||
	{								\
 | 
			
		||||
		return SyS##name(SC_IA32_REGS_TO_ARGS(x,__VA_ARGS__));	\
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#define COND_SYSCALL(name)						\
 | 
			
		||||
	cond_syscall(sys_##name);					\
 | 
			
		||||
	cond_syscall(__sys_ia32_##name)
 | 
			
		||||
 | 
			
		||||
#define SYS_NI(name)							\
 | 
			
		||||
	SYSCALL_ALIAS(sys_##name, sys_ni_posix_timers);			\
 | 
			
		||||
	SYSCALL_ALIAS(__sys_ia32_##name, sys_ni_posix_timers)
 | 
			
		||||
 | 
			
		||||
#else /* CONFIG_IA32_EMULATION */
 | 
			
		||||
#define COMPAT_SC_IA32_STUBx(x, name, ...)
 | 
			
		||||
#define SC_IA32_WRAPPERx(x, fullname, name, ...)
 | 
			
		||||
#endif /* CONFIG_IA32_EMULATION */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_X86_X32
 | 
			
		||||
/*
 | 
			
		||||
 * For the x32 ABI, we need to create a stub for compat_sys_*() which is aware
 | 
			
		||||
 * of the x86-64-style parameter ordering of x32 syscalls. The syscalls common
 | 
			
		||||
 * with x86_64 obviously do not need such care.
 | 
			
		||||
 */
 | 
			
		||||
#define COMPAT_SC_X32_STUBx(x, name, ...)				\
 | 
			
		||||
	asmlinkage long __compat_sys_x32##name(const struct pt_regs *regs);\
 | 
			
		||||
	ALLOW_ERROR_INJECTION(__compat_sys_x32##name, ERRNO);		\
 | 
			
		||||
	asmlinkage long __compat_sys_x32##name(const struct pt_regs *regs)\
 | 
			
		||||
	{								\
 | 
			
		||||
		return c_SyS##name(SC_X86_64_REGS_TO_ARGS(x,__VA_ARGS__));\
 | 
			
		||||
	}								\
 | 
			
		||||
 | 
			
		||||
#else /* CONFIG_X86_X32 */
 | 
			
		||||
#define COMPAT_SC_X32_STUBx(x, name, ...)
 | 
			
		||||
#endif /* CONFIG_X86_X32 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_COMPAT
 | 
			
		||||
/*
 | 
			
		||||
 * Compat means IA32_EMULATION and/or X86_X32. As they use a different
 | 
			
		||||
 * mapping of registers to parameters, we need to generate stubs for each
 | 
			
		||||
 * of them. There is no need to implement COMPAT_SYSCALL_DEFINE0, as it is
 | 
			
		||||
 * unused on x86.
 | 
			
		||||
 */
 | 
			
		||||
#define COMPAT_SYSCALL_DEFINEx(x, name, ...)				\
 | 
			
		||||
	static long c_SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__));	\
 | 
			
		||||
	static inline long C_SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__));\
 | 
			
		||||
	COMPAT_SC_IA32_STUBx(x, name, __VA_ARGS__)			\
 | 
			
		||||
	COMPAT_SC_X32_STUBx(x, name, __VA_ARGS__)			\
 | 
			
		||||
	static long c_SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__))		\
 | 
			
		||||
	{								\
 | 
			
		||||
		return C_SYSC##name(__MAP(x,__SC_DELOUSE,__VA_ARGS__));	\
 | 
			
		||||
	}								\
 | 
			
		||||
	static inline long C_SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__))
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * As some compat syscalls may not be implemented, we need to expand
 | 
			
		||||
 * COND_SYSCALL_COMPAT in kernel/sys_ni.c and COMPAT_SYS_NI in
 | 
			
		||||
 * kernel/time/posix-stubs.c to cover this case as well.
 | 
			
		||||
 */
 | 
			
		||||
#define COND_SYSCALL_COMPAT(name) 					\
 | 
			
		||||
	cond_syscall(__compat_sys_ia32_##name);				\
 | 
			
		||||
	cond_syscall(__compat_sys_x32_##name)
 | 
			
		||||
 | 
			
		||||
#define COMPAT_SYS_NI(name)						\
 | 
			
		||||
	SYSCALL_ALIAS(__compat_sys_ia32_##name, sys_ni_posix_timers);	\
 | 
			
		||||
	SYSCALL_ALIAS(__compat_sys_x32_##name, sys_ni_posix_timers)
 | 
			
		||||
 | 
			
		||||
#endif /* CONFIG_COMPAT */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Instead of the generic __SYSCALL_DEFINEx() definition, this macro takes
 | 
			
		||||
 * struct pt_regs *regs as the only argument of the syscall stub named
 | 
			
		||||
| 
						 | 
				
			
			@ -34,9 +139,14 @@
 | 
			
		|||
 * This approach avoids leaking random user-provided register content down
 | 
			
		||||
 * the call chain.
 | 
			
		||||
 *
 | 
			
		||||
 * If IA32_EMULATION is enabled, this macro generates an additional wrapper
 | 
			
		||||
 * named __sys_ia32_*() which decodes the struct pt_regs *regs according
 | 
			
		||||
 * to the i386 calling convention (bx, cx, dx, si, di, bp).
 | 
			
		||||
 *
 | 
			
		||||
 * As the generic SYSCALL_DEFINE0() macro does not decode any parameters for
 | 
			
		||||
 * obvious reasons, and passing struct pt_regs *regs to it in %rdi does not
 | 
			
		||||
 * hurt, there is no need to override it.
 | 
			
		||||
 * hurt, there is no need to override it, or to define it differently for
 | 
			
		||||
 * IA32_EMULATION.
 | 
			
		||||
 */
 | 
			
		||||
#define __SYSCALL_DEFINEx(x, name, ...)					\
 | 
			
		||||
	asmlinkage long sys##name(const struct pt_regs *regs);		\
 | 
			
		||||
| 
						 | 
				
			
			@ -45,10 +155,9 @@
 | 
			
		|||
	static inline long SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__));	\
 | 
			
		||||
	asmlinkage long sys##name(const struct pt_regs *regs)		\
 | 
			
		||||
	{								\
 | 
			
		||||
		return SyS##name(__MAP(x,__SC_ARGS			\
 | 
			
		||||
			,,regs->di,,regs->si,,regs->dx			\
 | 
			
		||||
			,,regs->r10,,regs->r8,,regs->r9));		\
 | 
			
		||||
		return SyS##name(SC_X86_64_REGS_TO_ARGS(x,__VA_ARGS__));\
 | 
			
		||||
	}								\
 | 
			
		||||
	SC_IA32_WRAPPERx(x, name, __VA_ARGS__)				\
 | 
			
		||||
	static long SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__))		\
 | 
			
		||||
	{								\
 | 
			
		||||
		long ret = SYSC##name(__MAP(x,__SC_CAST,__VA_ARGS__));	\
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue