diff options
author | Michael Holzheu <holzheu@linux.vnet.ibm.com> | 2009-01-23 15:40:24 (GMT) |
---|---|---|
committer | Heiko Carstens <heiko.carstens@de.ibm.com> | 2009-01-23 15:40:28 (GMT) |
commit | e9a4e9d563ea643d305b5fe83031d7deca311db3 (patch) | |
tree | e40a6ceee197a48f6d15fce4bf4d62225e76a1ff /arch/s390 | |
parent | 03e4c49f847f23c62900424f65a62f76de5a7151 (diff) | |
download | linux-fsl-qoriq-e9a4e9d563ea643d305b5fe83031d7deca311db3.tar.xz |
[S390] fix compat sigaltstack syscall table entry
When 31 bit user space programs call sigaltstack on a 64 bit Linux
OS, the system call returns -1 with errno=EFAULT. The 31 bit pointer passed
to the system call is extended to 64 bit, but the high order bits are not
set to zero. The kernel detects the invalid user space pointer and
returns -EFAULT. To solve the problem, sys32_sigaltstack_wrapper()
instead of sys32_sigaltstack() has to be called. The wrapper function sets
the high order bits to zero.
Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Diffstat (limited to 'arch/s390')
-rw-r--r-- | arch/s390/kernel/syscalls.S | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/s390/kernel/syscalls.S b/arch/s390/kernel/syscalls.S index 76d16e0..3e18d8a 100644 --- a/arch/s390/kernel/syscalls.S +++ b/arch/s390/kernel/syscalls.S @@ -194,7 +194,7 @@ SYSCALL(sys_chown16,sys_ni_syscall,sys32_chown16_wrapper) /* old chown16 syscall SYSCALL(sys_getcwd,sys_getcwd,sys32_getcwd_wrapper) SYSCALL(sys_capget,sys_capget,sys32_capget_wrapper) SYSCALL(sys_capset,sys_capset,sys32_capset_wrapper) /* 185 */ -SYSCALL(sys_sigaltstack,sys_sigaltstack,sys32_sigaltstack) +SYSCALL(sys_sigaltstack,sys_sigaltstack,sys32_sigaltstack_wrapper) SYSCALL(sys_sendfile,sys_sendfile64,sys32_sendfile_wrapper) NI_SYSCALL /* streams1 */ NI_SYSCALL /* streams2 */ |