|
@@ -15,6 +15,8 @@
|
|
#include <asm/vsyscall32.h>
|
|
#include <asm/vsyscall32.h>
|
|
#include <linux/linkage.h>
|
|
#include <linux/linkage.h>
|
|
|
|
|
|
|
|
+#define IA32_NR_syscalls ((ia32_syscall_end - ia32_sys_call_table)/8)
|
|
|
|
+
|
|
.macro IA32_ARG_FIXUP noebp=0
|
|
.macro IA32_ARG_FIXUP noebp=0
|
|
movl %edi,%r8d
|
|
movl %edi,%r8d
|
|
.if \noebp
|
|
.if \noebp
|
|
@@ -109,8 +111,8 @@ ENTRY(ia32_sysenter_target)
|
|
CFI_REMEMBER_STATE
|
|
CFI_REMEMBER_STATE
|
|
jnz sysenter_tracesys
|
|
jnz sysenter_tracesys
|
|
sysenter_do_call:
|
|
sysenter_do_call:
|
|
- cmpl $(IA32_NR_syscalls),%eax
|
|
|
|
- jae ia32_badsys
|
|
|
|
|
|
+ cmpl $(IA32_NR_syscalls-1),%eax
|
|
|
|
+ ja ia32_badsys
|
|
IA32_ARG_FIXUP 1
|
|
IA32_ARG_FIXUP 1
|
|
call *ia32_sys_call_table(,%rax,8)
|
|
call *ia32_sys_call_table(,%rax,8)
|
|
movq %rax,RAX-ARGOFFSET(%rsp)
|
|
movq %rax,RAX-ARGOFFSET(%rsp)
|
|
@@ -210,8 +212,8 @@ ENTRY(ia32_cstar_target)
|
|
CFI_REMEMBER_STATE
|
|
CFI_REMEMBER_STATE
|
|
jnz cstar_tracesys
|
|
jnz cstar_tracesys
|
|
cstar_do_call:
|
|
cstar_do_call:
|
|
- cmpl $IA32_NR_syscalls,%eax
|
|
|
|
- jae ia32_badsys
|
|
|
|
|
|
+ cmpl $IA32_NR_syscalls-1,%eax
|
|
|
|
+ ja ia32_badsys
|
|
IA32_ARG_FIXUP 1
|
|
IA32_ARG_FIXUP 1
|
|
call *ia32_sys_call_table(,%rax,8)
|
|
call *ia32_sys_call_table(,%rax,8)
|
|
movq %rax,RAX-ARGOFFSET(%rsp)
|
|
movq %rax,RAX-ARGOFFSET(%rsp)
|
|
@@ -296,8 +298,8 @@ ENTRY(ia32_syscall)
|
|
testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%r10)
|
|
testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%r10)
|
|
jnz ia32_tracesys
|
|
jnz ia32_tracesys
|
|
ia32_do_syscall:
|
|
ia32_do_syscall:
|
|
- cmpl $(IA32_NR_syscalls),%eax
|
|
|
|
- jae ia32_badsys
|
|
|
|
|
|
+ cmpl $(IA32_NR_syscalls-1),%eax
|
|
|
|
+ ja ia32_badsys
|
|
IA32_ARG_FIXUP
|
|
IA32_ARG_FIXUP
|
|
call *ia32_sys_call_table(,%rax,8) # xxx: rip relative
|
|
call *ia32_sys_call_table(,%rax,8) # xxx: rip relative
|
|
ia32_sysret:
|
|
ia32_sysret:
|
|
@@ -691,6 +693,3 @@ ia32_sys_call_table:
|
|
.quad compat_sys_set_robust_list
|
|
.quad compat_sys_set_robust_list
|
|
.quad compat_sys_get_robust_list
|
|
.quad compat_sys_get_robust_list
|
|
ia32_syscall_end:
|
|
ia32_syscall_end:
|
|
- .rept IA32_NR_syscalls-(ia32_syscall_end-ia32_sys_call_table)/8
|
|
|
|
- .quad ni_syscall
|
|
|
|
- .endr
|
|
|