If a restartable syscall is called using the indirect o32 syscall handler - eg: syscall(__NR_waitid, ...), then it is possible for the incorrect arguments to be passed to the syscall after it has been restarted. This is because the syscall handler tries to shift all the registers down one place in pt_regs so that when the syscall is restarted, the "real" syscall is called instead. Unfortunately it only shifts the arguments passed in registers, not the arguments on the user stack. This causes the 4th argument to be duplicated when the syscall is restarted. Fix by removing all the pt_regs shifting so that the indirect syscall handler is called again when the syscall is restarted. The comment "some syscalls like execve get their arguments from struct pt_regs" is long out of date so this should now be safe. Signed-off-by: James Cowgill <James.Cowgill@imgtec.com> Reviewed-by: James Hogan <james.hogan@imgtec.com> Tested-by: James Hogan <james.hogan@imgtec.com> Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/15856/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
		
			
				
	
	
		
			587 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			587 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| /*
 | |
|  * This file is subject to the terms and conditions of the GNU General Public
 | |
|  * License.  See the file "COPYING" in the main directory of this archive
 | |
|  * for more details.
 | |
|  *
 | |
|  * Copyright (C) 1995 - 2000, 2001 by Ralf Baechle
 | |
|  * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
 | |
|  * Copyright (C) 2001 MIPS Technologies, Inc.
 | |
|  * Copyright (C) 2004 Thiemo Seufer
 | |
|  *
 | |
|  * Hairy, the userspace application uses a different argument passing
 | |
|  * convention than the kernel, so we have to translate things from o32
 | |
|  * to ABI64 calling convention.	 64-bit syscalls are also processed
 | |
|  * here for now.
 | |
|  */
 | |
| #include <linux/errno.h>
 | |
| #include <asm/asm.h>
 | |
| #include <asm/asmmacro.h>
 | |
| #include <asm/irqflags.h>
 | |
| #include <asm/mipsregs.h>
 | |
| #include <asm/regdef.h>
 | |
| #include <asm/stackframe.h>
 | |
| #include <asm/thread_info.h>
 | |
| #include <asm/unistd.h>
 | |
| #include <asm/sysmips.h>
 | |
| 
 | |
| 	.align	5
 | |
| NESTED(handle_sys, PT_SIZE, sp)
 | |
| 	.set	noat
 | |
| 	SAVE_SOME
 | |
| 	TRACE_IRQS_ON_RELOAD
 | |
| 	STI
 | |
| 	.set	at
 | |
| 	ld	t1, PT_EPC(sp)		# skip syscall on return
 | |
| 
 | |
| 	dsubu	t0, v0, __NR_O32_Linux	# check syscall number
 | |
| 	sltiu	t0, t0, __NR_O32_Linux_syscalls + 1
 | |
| 	daddiu	t1, 4			# skip to next instruction
 | |
| 	sd	t1, PT_EPC(sp)
 | |
| 	beqz	t0, not_o32_scall
 | |
| #if 0
 | |
|  SAVE_ALL
 | |
|  move a1, v0
 | |
|  PRINT("Scall %ld\n")
 | |
|  RESTORE_ALL
 | |
| #endif
 | |
| 
 | |
| 	/* We don't want to stumble over broken sign extensions from
 | |
| 	   userland. O32 does never use the upper half. */
 | |
| 	sll	a0, a0, 0
 | |
| 	sll	a1, a1, 0
 | |
| 	sll	a2, a2, 0
 | |
| 	sll	a3, a3, 0
 | |
| 
 | |
| 	sd	a3, PT_R26(sp)		# save a3 for syscall restarting
 | |
| 
 | |
| 	/*
 | |
| 	 * More than four arguments.  Try to deal with it by copying the
 | |
| 	 * stack arguments from the user stack to the kernel stack.
 | |
| 	 * This Sucks (TM).
 | |
| 	 *
 | |
| 	 * We intentionally keep the kernel stack a little below the top of
 | |
| 	 * userspace so we don't have to do a slower byte accurate check here.
 | |
| 	 */
 | |
| 	ld	t0, PT_R29(sp)		# get old user stack pointer
 | |
| 	daddu	t1, t0, 32
 | |
| 	bltz	t1, bad_stack
 | |
| 
 | |
| load_a4: lw	a4, 16(t0)		# argument #5 from usp
 | |
| load_a5: lw	a5, 20(t0)		# argument #6 from usp
 | |
| load_a6: lw	a6, 24(t0)		# argument #7 from usp
 | |
| load_a7: lw	a7, 28(t0)		# argument #8 from usp
 | |
| loads_done:
 | |
| 
 | |
| 	.section __ex_table,"a"
 | |
| 	PTR	load_a4, bad_stack_a4
 | |
| 	PTR	load_a5, bad_stack_a5
 | |
| 	PTR	load_a6, bad_stack_a6
 | |
| 	PTR	load_a7, bad_stack_a7
 | |
| 	.previous
 | |
| 
 | |
| 	li	t1, _TIF_WORK_SYSCALL_ENTRY
 | |
| 	LONG_L	t0, TI_FLAGS($28)	# syscall tracing enabled?
 | |
| 	and	t0, t1, t0
 | |
| 	bnez	t0, trace_a_syscall
 | |
| 
 | |
| syscall_common:
 | |
| 	dsll	t0, v0, 3		# offset into table
 | |
| 	ld	t2, (sys32_call_table - (__NR_O32_Linux * 8))(t0)
 | |
| 
 | |
| 	jalr	t2			# Do The Real Thing (TM)
 | |
| 
 | |
| 	li	t0, -EMAXERRNO - 1	# error?
 | |
| 	sltu	t0, t0, v0
 | |
| 	sd	t0, PT_R7(sp)		# set error flag
 | |
| 	beqz	t0, 1f
 | |
| 
 | |
| 	ld	t1, PT_R2(sp)		# syscall number
 | |
| 	dnegu	v0			# error
 | |
| 	sd	t1, PT_R0(sp)		# save it for syscall restarting
 | |
| 1:	sd	v0, PT_R2(sp)		# result
 | |
| 
 | |
| o32_syscall_exit:
 | |
| 	j	syscall_exit_partial
 | |
| 
 | |
| /* ------------------------------------------------------------------------ */
 | |
| 
 | |
| trace_a_syscall:
 | |
| 	SAVE_STATIC
 | |
| 	sd	a4, PT_R8(sp)		# Save argument registers
 | |
| 	sd	a5, PT_R9(sp)
 | |
| 	sd	a6, PT_R10(sp)
 | |
| 	sd	a7, PT_R11(sp)		# For indirect syscalls
 | |
| 
 | |
| 	move	a0, sp
 | |
| 	/*
 | |
| 	 * absolute syscall number is in v0 unless we called syscall(__NR_###)
 | |
| 	 * where the real syscall number is in a0
 | |
| 	 * note: NR_syscall is the first O32 syscall but the macro is
 | |
| 	 * only defined when compiling with -mabi=32 (CONFIG_32BIT)
 | |
| 	 * therefore __NR_O32_Linux is used (4000)
 | |
| 	 */
 | |
| 	.set	push
 | |
| 	.set	reorder
 | |
| 	subu	t1, v0,  __NR_O32_Linux
 | |
| 	move	a1, v0
 | |
| 	bnez	t1, 1f /* __NR_syscall at offset 0 */
 | |
| 	lw	a1, PT_R4(sp) /* Arg1 for __NR_syscall case */
 | |
| 	.set	pop
 | |
| 
 | |
| 1:	jal	syscall_trace_enter
 | |
| 
 | |
| 	bltz	v0, 1f			# seccomp failed? Skip syscall
 | |
| 
 | |
| 	RESTORE_STATIC
 | |
| 	ld	v0, PT_R2(sp)		# Restore syscall (maybe modified)
 | |
| 	ld	a0, PT_R4(sp)		# Restore argument registers
 | |
| 	ld	a1, PT_R5(sp)
 | |
| 	ld	a2, PT_R6(sp)
 | |
| 	ld	a3, PT_R7(sp)
 | |
| 	ld	a4, PT_R8(sp)
 | |
| 	ld	a5, PT_R9(sp)
 | |
| 	ld	a6, PT_R10(sp)
 | |
| 	ld	a7, PT_R11(sp)		# For indirect syscalls
 | |
| 
 | |
| 	dsubu	t0, v0, __NR_O32_Linux	# check (new) syscall number
 | |
| 	sltiu	t0, t0, __NR_O32_Linux_syscalls + 1
 | |
| 	beqz	t0, not_o32_scall
 | |
| 
 | |
| 	j	syscall_common
 | |
| 
 | |
| 1:	j	syscall_exit
 | |
| 
 | |
| /* ------------------------------------------------------------------------ */
 | |
| 
 | |
| 	/*
 | |
| 	 * The stackpointer for a call with more than 4 arguments is bad.
 | |
| 	 */
 | |
| bad_stack:
 | |
| 	li	v0, EFAULT
 | |
| 	sd	v0, PT_R2(sp)
 | |
| 	li	t0, 1			# set error flag
 | |
| 	sd	t0, PT_R7(sp)
 | |
| 	j	o32_syscall_exit
 | |
| 
 | |
| bad_stack_a4:
 | |
| 	li	a4, 0
 | |
| 	b	load_a5
 | |
| 
 | |
| bad_stack_a5:
 | |
| 	li	a5, 0
 | |
| 	b	load_a6
 | |
| 
 | |
| bad_stack_a6:
 | |
| 	li	a6, 0
 | |
| 	b	load_a7
 | |
| 
 | |
| bad_stack_a7:
 | |
| 	li	a7, 0
 | |
| 	b	loads_done
 | |
| 
 | |
| not_o32_scall:
 | |
| 	/*
 | |
| 	 * This is not an o32 compatibility syscall, pass it on
 | |
| 	 * to the 64-bit syscall handlers.
 | |
| 	 */
 | |
| #ifdef CONFIG_MIPS32_N32
 | |
| 	j	handle_sysn32
 | |
| #else
 | |
| 	j	handle_sys64
 | |
| #endif
 | |
| 	END(handle_sys)
 | |
| 
 | |
| LEAF(sys32_syscall)
 | |
| 	subu	t0, a0, __NR_O32_Linux	# check syscall number
 | |
| 	sltiu	v0, t0, __NR_O32_Linux_syscalls + 1
 | |
| 	beqz	t0, einval		# do not recurse
 | |
| 	dsll	t1, t0, 3
 | |
| 	beqz	v0, einval
 | |
| 	ld	t2, sys32_call_table(t1)		# syscall routine
 | |
| 
 | |
| 	move	a0, a1			# shift argument registers
 | |
| 	move	a1, a2
 | |
| 	move	a2, a3
 | |
| 	move	a3, a4
 | |
| 	move	a4, a5
 | |
| 	move	a5, a6
 | |
| 	move	a6, a7
 | |
| 	jr	t2
 | |
| 	/* Unreached */
 | |
| 
 | |
| einval: li	v0, -ENOSYS
 | |
| 	jr	ra
 | |
| 	END(sys32_syscall)
 | |
| 
 | |
| 	.align	3
 | |
| 	.type	sys32_call_table,@object
 | |
| EXPORT(sys32_call_table)
 | |
| 	PTR	sys32_syscall			/* 4000 */
 | |
| 	PTR	sys_exit
 | |
| 	PTR	__sys_fork
 | |
| 	PTR	sys_read
 | |
| 	PTR	sys_write
 | |
| 	PTR	compat_sys_open			/* 4005 */
 | |
| 	PTR	sys_close
 | |
| 	PTR	sys_waitpid
 | |
| 	PTR	sys_creat
 | |
| 	PTR	sys_link
 | |
| 	PTR	sys_unlink			/* 4010 */
 | |
| 	PTR	compat_sys_execve
 | |
| 	PTR	sys_chdir
 | |
| 	PTR	compat_sys_time
 | |
| 	PTR	sys_mknod
 | |
| 	PTR	sys_chmod			/* 4015 */
 | |
| 	PTR	sys_lchown
 | |
| 	PTR	sys_ni_syscall
 | |
| 	PTR	sys_ni_syscall			/* was sys_stat */
 | |
| 	PTR	sys_lseek
 | |
| 	PTR	sys_getpid			/* 4020 */
 | |
| 	PTR	compat_sys_mount
 | |
| 	PTR	sys_oldumount
 | |
| 	PTR	sys_setuid
 | |
| 	PTR	sys_getuid
 | |
| 	PTR	compat_sys_stime		/* 4025 */
 | |
| 	PTR	compat_sys_ptrace
 | |
| 	PTR	sys_alarm
 | |
| 	PTR	sys_ni_syscall			/* was sys_fstat */
 | |
| 	PTR	sys_pause
 | |
| 	PTR	compat_sys_utime		/* 4030 */
 | |
| 	PTR	sys_ni_syscall
 | |
| 	PTR	sys_ni_syscall
 | |
| 	PTR	sys_access
 | |
| 	PTR	sys_nice
 | |
| 	PTR	sys_ni_syscall			/* 4035 */
 | |
| 	PTR	sys_sync
 | |
| 	PTR	sys_kill
 | |
| 	PTR	sys_rename
 | |
| 	PTR	sys_mkdir
 | |
| 	PTR	sys_rmdir			/* 4040 */
 | |
| 	PTR	sys_dup
 | |
| 	PTR	sysm_pipe
 | |
| 	PTR	compat_sys_times
 | |
| 	PTR	sys_ni_syscall
 | |
| 	PTR	sys_brk				/* 4045 */
 | |
| 	PTR	sys_setgid
 | |
| 	PTR	sys_getgid
 | |
| 	PTR	sys_ni_syscall			/* was signal	2 */
 | |
| 	PTR	sys_geteuid
 | |
| 	PTR	sys_getegid			/* 4050 */
 | |
| 	PTR	sys_acct
 | |
| 	PTR	sys_umount
 | |
| 	PTR	sys_ni_syscall
 | |
| 	PTR	compat_sys_ioctl
 | |
| 	PTR	compat_sys_fcntl		/* 4055 */
 | |
| 	PTR	sys_ni_syscall
 | |
| 	PTR	sys_setpgid
 | |
| 	PTR	sys_ni_syscall
 | |
| 	PTR	sys_olduname
 | |
| 	PTR	sys_umask			/* 4060 */
 | |
| 	PTR	sys_chroot
 | |
| 	PTR	compat_sys_ustat
 | |
| 	PTR	sys_dup2
 | |
| 	PTR	sys_getppid
 | |
| 	PTR	sys_getpgrp			/* 4065 */
 | |
| 	PTR	sys_setsid
 | |
| 	PTR	sys_32_sigaction
 | |
| 	PTR	sys_sgetmask
 | |
| 	PTR	sys_ssetmask
 | |
| 	PTR	sys_setreuid			/* 4070 */
 | |
| 	PTR	sys_setregid
 | |
| 	PTR	sys32_sigsuspend
 | |
| 	PTR	compat_sys_sigpending
 | |
| 	PTR	sys_sethostname
 | |
| 	PTR	compat_sys_setrlimit		/* 4075 */
 | |
| 	PTR	compat_sys_getrlimit
 | |
| 	PTR	compat_sys_getrusage
 | |
| 	PTR	compat_sys_gettimeofday
 | |
| 	PTR	compat_sys_settimeofday
 | |
| 	PTR	sys_getgroups			/* 4080 */
 | |
| 	PTR	sys_setgroups
 | |
| 	PTR	sys_ni_syscall			/* old_select */
 | |
| 	PTR	sys_symlink
 | |
| 	PTR	sys_ni_syscall			/* was sys_lstat */
 | |
| 	PTR	sys_readlink			/* 4085 */
 | |
| 	PTR	sys_uselib
 | |
| 	PTR	sys_swapon
 | |
| 	PTR	sys_reboot
 | |
| 	PTR	compat_sys_old_readdir
 | |
| 	PTR	sys_mips_mmap			/* 4090 */
 | |
| 	PTR	sys_munmap
 | |
| 	PTR	compat_sys_truncate
 | |
| 	PTR	compat_sys_ftruncate
 | |
| 	PTR	sys_fchmod
 | |
| 	PTR	sys_fchown			/* 4095 */
 | |
| 	PTR	sys_getpriority
 | |
| 	PTR	sys_setpriority
 | |
| 	PTR	sys_ni_syscall
 | |
| 	PTR	compat_sys_statfs
 | |
| 	PTR	compat_sys_fstatfs		/* 4100 */
 | |
| 	PTR	sys_ni_syscall			/* sys_ioperm */
 | |
| 	PTR	compat_sys_socketcall
 | |
| 	PTR	sys_syslog
 | |
| 	PTR	compat_sys_setitimer
 | |
| 	PTR	compat_sys_getitimer		/* 4105 */
 | |
| 	PTR	compat_sys_newstat
 | |
| 	PTR	compat_sys_newlstat
 | |
| 	PTR	compat_sys_newfstat
 | |
| 	PTR	sys_uname
 | |
| 	PTR	sys_ni_syscall			/* sys_ioperm  *//* 4110 */
 | |
| 	PTR	sys_vhangup
 | |
| 	PTR	sys_ni_syscall			/* was sys_idle	 */
 | |
| 	PTR	sys_ni_syscall			/* sys_vm86 */
 | |
| 	PTR	compat_sys_wait4
 | |
| 	PTR	sys_swapoff			/* 4115 */
 | |
| 	PTR	compat_sys_sysinfo
 | |
| 	PTR	compat_sys_ipc
 | |
| 	PTR	sys_fsync
 | |
| 	PTR	sys32_sigreturn
 | |
| 	PTR	__sys_clone			/* 4120 */
 | |
| 	PTR	sys_setdomainname
 | |
| 	PTR	sys_newuname
 | |
| 	PTR	sys_ni_syscall			/* sys_modify_ldt */
 | |
| 	PTR	compat_sys_adjtimex
 | |
| 	PTR	sys_mprotect			/* 4125 */
 | |
| 	PTR	compat_sys_sigprocmask
 | |
| 	PTR	sys_ni_syscall			/* was creat_module */
 | |
| 	PTR	sys_init_module
 | |
| 	PTR	sys_delete_module
 | |
| 	PTR	sys_ni_syscall			/* 4130, get_kernel_syms */
 | |
| 	PTR	sys_quotactl
 | |
| 	PTR	sys_getpgid
 | |
| 	PTR	sys_fchdir
 | |
| 	PTR	sys_bdflush
 | |
| 	PTR	sys_sysfs			/* 4135 */
 | |
| 	PTR	sys_32_personality
 | |
| 	PTR	sys_ni_syscall			/* for afs_syscall */
 | |
| 	PTR	sys_setfsuid
 | |
| 	PTR	sys_setfsgid
 | |
| 	PTR	sys_32_llseek			/* 4140 */
 | |
| 	PTR	compat_sys_getdents
 | |
| 	PTR	compat_sys_select
 | |
| 	PTR	sys_flock
 | |
| 	PTR	sys_msync
 | |
| 	PTR	compat_sys_readv		/* 4145 */
 | |
| 	PTR	compat_sys_writev
 | |
| 	PTR	sys_cacheflush
 | |
| 	PTR	sys_cachectl
 | |
| 	PTR	__sys_sysmips
 | |
| 	PTR	sys_ni_syscall			/* 4150 */
 | |
| 	PTR	sys_getsid
 | |
| 	PTR	sys_fdatasync
 | |
| 	PTR	compat_sys_sysctl
 | |
| 	PTR	sys_mlock
 | |
| 	PTR	sys_munlock			/* 4155 */
 | |
| 	PTR	sys_mlockall
 | |
| 	PTR	sys_munlockall
 | |
| 	PTR	sys_sched_setparam
 | |
| 	PTR	sys_sched_getparam
 | |
| 	PTR	sys_sched_setscheduler		/* 4160 */
 | |
| 	PTR	sys_sched_getscheduler
 | |
| 	PTR	sys_sched_yield
 | |
| 	PTR	sys_sched_get_priority_max
 | |
| 	PTR	sys_sched_get_priority_min
 | |
| 	PTR	compat_sys_sched_rr_get_interval	/* 4165 */
 | |
| 	PTR	compat_sys_nanosleep
 | |
| 	PTR	sys_mremap
 | |
| 	PTR	sys_accept
 | |
| 	PTR	sys_bind
 | |
| 	PTR	sys_connect			/* 4170 */
 | |
| 	PTR	sys_getpeername
 | |
| 	PTR	sys_getsockname
 | |
| 	PTR	compat_sys_getsockopt
 | |
| 	PTR	sys_listen
 | |
| 	PTR	compat_sys_recv			/* 4175 */
 | |
| 	PTR	compat_sys_recvfrom
 | |
| 	PTR	compat_sys_recvmsg
 | |
| 	PTR	sys_send
 | |
| 	PTR	compat_sys_sendmsg
 | |
| 	PTR	sys_sendto			/* 4180 */
 | |
| 	PTR	compat_sys_setsockopt
 | |
| 	PTR	sys_shutdown
 | |
| 	PTR	sys_socket
 | |
| 	PTR	sys_socketpair
 | |
| 	PTR	sys_setresuid			/* 4185 */
 | |
| 	PTR	sys_getresuid
 | |
| 	PTR	sys_ni_syscall			/* was query_module */
 | |
| 	PTR	sys_poll
 | |
| 	PTR	sys_ni_syscall			/* was nfsservctl */
 | |
| 	PTR	sys_setresgid			/* 4190 */
 | |
| 	PTR	sys_getresgid
 | |
| 	PTR	sys_prctl
 | |
| 	PTR	sys32_rt_sigreturn
 | |
| 	PTR	compat_sys_rt_sigaction
 | |
| 	PTR	compat_sys_rt_sigprocmask	/* 4195 */
 | |
| 	PTR	compat_sys_rt_sigpending
 | |
| 	PTR	compat_sys_rt_sigtimedwait
 | |
| 	PTR	compat_sys_rt_sigqueueinfo
 | |
| 	PTR	compat_sys_rt_sigsuspend
 | |
| 	PTR	sys_32_pread			/* 4200 */
 | |
| 	PTR	sys_32_pwrite
 | |
| 	PTR	sys_chown
 | |
| 	PTR	sys_getcwd
 | |
| 	PTR	sys_capget
 | |
| 	PTR	sys_capset			/* 4205 */
 | |
| 	PTR	compat_sys_sigaltstack
 | |
| 	PTR	compat_sys_sendfile
 | |
| 	PTR	sys_ni_syscall
 | |
| 	PTR	sys_ni_syscall
 | |
| 	PTR	sys_mips_mmap2			/* 4210 */
 | |
| 	PTR	sys_32_truncate64
 | |
| 	PTR	sys_32_ftruncate64
 | |
| 	PTR	sys_newstat
 | |
| 	PTR	sys_newlstat
 | |
| 	PTR	sys_newfstat			/* 4215 */
 | |
| 	PTR	sys_pivot_root
 | |
| 	PTR	sys_mincore
 | |
| 	PTR	sys_madvise
 | |
| 	PTR	sys_getdents64
 | |
| 	PTR	compat_sys_fcntl64		/* 4220 */
 | |
| 	PTR	sys_ni_syscall
 | |
| 	PTR	sys_gettid
 | |
| 	PTR	sys32_readahead
 | |
| 	PTR	sys_setxattr
 | |
| 	PTR	sys_lsetxattr			/* 4225 */
 | |
| 	PTR	sys_fsetxattr
 | |
| 	PTR	sys_getxattr
 | |
| 	PTR	sys_lgetxattr
 | |
| 	PTR	sys_fgetxattr
 | |
| 	PTR	sys_listxattr			/* 4230 */
 | |
| 	PTR	sys_llistxattr
 | |
| 	PTR	sys_flistxattr
 | |
| 	PTR	sys_removexattr
 | |
| 	PTR	sys_lremovexattr
 | |
| 	PTR	sys_fremovexattr		/* 4235 */
 | |
| 	PTR	sys_tkill
 | |
| 	PTR	sys_sendfile64
 | |
| 	PTR	compat_sys_futex
 | |
| 	PTR	compat_sys_sched_setaffinity
 | |
| 	PTR	compat_sys_sched_getaffinity	/* 4240 */
 | |
| 	PTR	compat_sys_io_setup
 | |
| 	PTR	sys_io_destroy
 | |
| 	PTR	compat_sys_io_getevents
 | |
| 	PTR	compat_sys_io_submit
 | |
| 	PTR	sys_io_cancel			/* 4245 */
 | |
| 	PTR	sys_exit_group
 | |
| 	PTR	compat_sys_lookup_dcookie
 | |
| 	PTR	sys_epoll_create
 | |
| 	PTR	sys_epoll_ctl
 | |
| 	PTR	sys_epoll_wait			/* 4250 */
 | |
| 	PTR	sys_remap_file_pages
 | |
| 	PTR	sys_set_tid_address
 | |
| 	PTR	sys_restart_syscall
 | |
| 	PTR	sys32_fadvise64_64
 | |
| 	PTR	compat_sys_statfs64		/* 4255 */
 | |
| 	PTR	compat_sys_fstatfs64
 | |
| 	PTR	compat_sys_timer_create
 | |
| 	PTR	compat_sys_timer_settime
 | |
| 	PTR	compat_sys_timer_gettime
 | |
| 	PTR	sys_timer_getoverrun		/* 4260 */
 | |
| 	PTR	sys_timer_delete
 | |
| 	PTR	compat_sys_clock_settime
 | |
| 	PTR	compat_sys_clock_gettime
 | |
| 	PTR	compat_sys_clock_getres
 | |
| 	PTR	compat_sys_clock_nanosleep	/* 4265 */
 | |
| 	PTR	sys_tgkill
 | |
| 	PTR	compat_sys_utimes
 | |
| 	PTR	compat_sys_mbind
 | |
| 	PTR	compat_sys_get_mempolicy
 | |
| 	PTR	compat_sys_set_mempolicy	/* 4270 */
 | |
| 	PTR	compat_sys_mq_open
 | |
| 	PTR	sys_mq_unlink
 | |
| 	PTR	compat_sys_mq_timedsend
 | |
| 	PTR	compat_sys_mq_timedreceive
 | |
| 	PTR	compat_sys_mq_notify		/* 4275 */
 | |
| 	PTR	compat_sys_mq_getsetattr
 | |
| 	PTR	sys_ni_syscall			/* sys_vserver */
 | |
| 	PTR	compat_sys_waitid
 | |
| 	PTR	sys_ni_syscall			/* available, was setaltroot */
 | |
| 	PTR	sys_add_key			/* 4280 */
 | |
| 	PTR	sys_request_key
 | |
| 	PTR	compat_sys_keyctl
 | |
| 	PTR	sys_set_thread_area
 | |
| 	PTR	sys_inotify_init
 | |
| 	PTR	sys_inotify_add_watch		/* 4285 */
 | |
| 	PTR	sys_inotify_rm_watch
 | |
| 	PTR	compat_sys_migrate_pages
 | |
| 	PTR	compat_sys_openat
 | |
| 	PTR	sys_mkdirat
 | |
| 	PTR	sys_mknodat			/* 4290 */
 | |
| 	PTR	sys_fchownat
 | |
| 	PTR	compat_sys_futimesat
 | |
| 	PTR	sys_newfstatat
 | |
| 	PTR	sys_unlinkat
 | |
| 	PTR	sys_renameat			/* 4295 */
 | |
| 	PTR	sys_linkat
 | |
| 	PTR	sys_symlinkat
 | |
| 	PTR	sys_readlinkat
 | |
| 	PTR	sys_fchmodat
 | |
| 	PTR	sys_faccessat			/* 4300 */
 | |
| 	PTR	compat_sys_pselect6
 | |
| 	PTR	compat_sys_ppoll
 | |
| 	PTR	sys_unshare
 | |
| 	PTR	sys_splice
 | |
| 	PTR	sys32_sync_file_range		/* 4305 */
 | |
| 	PTR	sys_tee
 | |
| 	PTR	compat_sys_vmsplice
 | |
| 	PTR	compat_sys_move_pages
 | |
| 	PTR	compat_sys_set_robust_list
 | |
| 	PTR	compat_sys_get_robust_list	/* 4310 */
 | |
| 	PTR	compat_sys_kexec_load
 | |
| 	PTR	sys_getcpu
 | |
| 	PTR	compat_sys_epoll_pwait
 | |
| 	PTR	sys_ioprio_set
 | |
| 	PTR	sys_ioprio_get			/* 4315 */
 | |
| 	PTR	compat_sys_utimensat
 | |
| 	PTR	compat_sys_signalfd
 | |
| 	PTR	sys_ni_syscall			/* was timerfd */
 | |
| 	PTR	sys_eventfd
 | |
| 	PTR	sys32_fallocate			/* 4320 */
 | |
| 	PTR	sys_timerfd_create
 | |
| 	PTR	compat_sys_timerfd_gettime
 | |
| 	PTR	compat_sys_timerfd_settime
 | |
| 	PTR	compat_sys_signalfd4
 | |
| 	PTR	sys_eventfd2			/* 4325 */
 | |
| 	PTR	sys_epoll_create1
 | |
| 	PTR	sys_dup3
 | |
| 	PTR	sys_pipe2
 | |
| 	PTR	sys_inotify_init1
 | |
| 	PTR	compat_sys_preadv		/* 4330 */
 | |
| 	PTR	compat_sys_pwritev
 | |
| 	PTR	compat_sys_rt_tgsigqueueinfo
 | |
| 	PTR	sys_perf_event_open
 | |
| 	PTR	sys_accept4
 | |
| 	PTR	compat_sys_recvmmsg		/* 4335 */
 | |
| 	PTR	sys_fanotify_init
 | |
| 	PTR	compat_sys_fanotify_mark
 | |
| 	PTR	sys_prlimit64
 | |
| 	PTR	sys_name_to_handle_at
 | |
| 	PTR	compat_sys_open_by_handle_at	/* 4340 */
 | |
| 	PTR	compat_sys_clock_adjtime
 | |
| 	PTR	sys_syncfs
 | |
| 	PTR	compat_sys_sendmmsg
 | |
| 	PTR	sys_setns
 | |
| 	PTR	compat_sys_process_vm_readv	/* 4345 */
 | |
| 	PTR	compat_sys_process_vm_writev
 | |
| 	PTR	sys_kcmp
 | |
| 	PTR	sys_finit_module
 | |
| 	PTR	sys_sched_setattr
 | |
| 	PTR	sys_sched_getattr		/* 4350 */
 | |
| 	PTR	sys_renameat2
 | |
| 	PTR	sys_seccomp
 | |
| 	PTR	sys_getrandom
 | |
| 	PTR	sys_memfd_create
 | |
| 	PTR	sys_bpf				/* 4355 */
 | |
| 	PTR	compat_sys_execveat
 | |
| 	PTR	sys_userfaultfd
 | |
| 	PTR	sys_membarrier
 | |
| 	PTR	sys_mlock2
 | |
| 	PTR	sys_copy_file_range		/* 4360 */
 | |
| 	PTR	compat_sys_preadv2
 | |
| 	PTR	compat_sys_pwritev2
 | |
| 	PTR	sys_pkey_mprotect
 | |
| 	PTR	sys_pkey_alloc
 | |
| 	PTR	sys_pkey_free			/* 4365 */
 | |
| 	PTR	sys_statx
 | |
| 	.size	sys32_call_table,.-sys32_call_table
 |