summaryrefslogtreecommitdiffstats
path: root/arch/mips/kernel/scall64-o32.S
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-12-04 21:39:21 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2008-12-04 21:39:21 -0800
commit56d18e9932ebf4e8eca42d2ce509450e6c9c1666 (patch)
treecb7d041749cfc54754ba2f9f1cdb7c2037739c65 /arch/mips/kernel/scall64-o32.S
parent1cb434b20d85b90f2e5cf6cb80071069a052b1e1 (diff)
parentc6cb4df96fa22d1174d6fb6dfc2c7501d7afaeea (diff)
Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus
* 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus: MIPS: Return ENOSYS from sys32_syscall on 64bit kernels like elsewhere. MIPS: 64-bit: vmsplice needs to use the compat wrapper for o32 and N32. MIPS: o32: Fix number of arguments to splice(2). MIPS: Malta: Consolidate platform device code. MIPS: IP22, Fulong, Malta: Update defconfigs. MIPS: Malta: Add back RTC support MIPS: Fix potential DOS by untrusted user app.
Diffstat (limited to 'arch/mips/kernel/scall64-o32.S')
-rw-r--r--arch/mips/kernel/scall64-o32.S16
1 files changed, 7 insertions, 9 deletions
diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S
index 6c7ef8313eb..fefef4af859 100644
--- a/arch/mips/kernel/scall64-o32.S
+++ b/arch/mips/kernel/scall64-o32.S
@@ -174,14 +174,12 @@ not_o32_scall:
END(handle_sys)
LEAF(sys32_syscall)
- sltu v0, a0, __NR_O32_Linux + __NR_O32_Linux_syscalls + 1
+ 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
-
- dsll v0, a0, 3
- ld t2, (sys_call_table - (__NR_O32_Linux * 8))(v0)
-
- li v1, 4000 # indirect syscall number
- beq a0, v1, einval # do not recurse
+ ld t2, sys_call_table(t1) # syscall routine
move a0, a1 # shift argument registers
move a1, a2
@@ -198,7 +196,7 @@ LEAF(sys32_syscall)
jr t2
/* Unreached */
-einval: li v0, -EINVAL
+einval: li v0, -ENOSYS
jr ra
END(sys32_syscall)
@@ -512,7 +510,7 @@ sys_call_table:
PTR sys_splice
PTR sys32_sync_file_range /* 4305 */
PTR sys_tee
- PTR sys_vmsplice
+ PTR compat_sys_vmsplice
PTR compat_sys_move_pages
PTR compat_sys_set_robust_list
PTR compat_sys_get_robust_list /* 4310 */