1 From: Gerald Schaefer <geraldsc@de.ibm.com>
2 Subject: kernel: Add missing wrapper functions for 31 bit compat syscalls.
3 References: bnc#466462,LTC#51229
5 Symptom: Some 31 bit system calls not work as expected on 64 bit Linux.
6 Therefore programs like e.g. 31 bit java may not work correctly.
7 Problem: Wrapper functions for the following compat system calls are
8 missing: readahead, sendfile64, tkill, tgkill and
9 keyctl. Due to the missing wrappers, the 31 bit system call
10 parameter registers are not correctly expanded to 64 bit.
11 Solution: Add wrapper functions that do the correct 31 bit to 64 bit
14 Acked-by: Hannes Reinecke <hare@suse.de>
16 arch/s390/kernel/compat_wrapper.S | 38 ++++++++++++++++++++++++++++++++++++++
17 arch/s390/kernel/syscalls.S | 10 +++++-----
18 2 files changed, 43 insertions(+), 5 deletions(-)
20 Index: linux-sles11/arch/s390/kernel/compat_wrapper.S
21 ===================================================================
22 --- linux-sles11.orig/arch/s390/kernel/compat_wrapper.S
23 +++ linux-sles11/arch/s390/kernel/compat_wrapper.S
24 @@ -1769,3 +1769,41 @@ sys_dup3_wrapper:
25 sys_epoll_create1_wrapper:
27 jg sys_epoll_create1 # branch to system call
29 + .globl sys32_readahead_wrapper
30 +sys32_readahead_wrapper:
35 + jg sys32_readahead # branch to system call
37 + .globl sys32_sendfile64_wrapper
38 +sys32_sendfile64_wrapper:
41 + llgtr %r4,%r4 # compat_loff_t *
43 + jg sys32_sendfile64 # branch to system call
45 + .globl sys_tkill_wrapper
47 + lgfr %r2,%r2 # pid_t
49 + jg sys_tkill # branch to system call
51 + .globl sys_tgkill_wrapper
53 + lgfr %r2,%r2 # pid_t
54 + lgfr %r3,%r3 # pid_t
56 + jg sys_tgkill # branch to system call
58 + .globl compat_sys_keyctl_wrapper
59 +compat_sys_keyctl_wrapper:
65 + jg compat_sys_keyctl # branch to system call
66 Index: linux-sles11/arch/s390/kernel/syscalls.S
67 ===================================================================
68 --- linux-sles11.orig/arch/s390/kernel/syscalls.S
69 +++ linux-sles11/arch/s390/kernel/syscalls.S
70 @@ -230,8 +230,8 @@ SYSCALL(sys_mincore,sys_mincore,sys32_mi
71 SYSCALL(sys_madvise,sys_madvise,sys32_madvise_wrapper)
72 SYSCALL(sys_getdents64,sys_getdents64,sys32_getdents64_wrapper) /* 220 */
73 SYSCALL(sys_fcntl64,sys_ni_syscall,compat_sys_fcntl64_wrapper)
74 -SYSCALL(sys_readahead,sys_readahead,sys32_readahead)
75 -SYSCALL(sys_sendfile64,sys_ni_syscall,sys32_sendfile64)
76 +SYSCALL(sys_readahead,sys_readahead,sys32_readahead_wrapper)
77 +SYSCALL(sys_sendfile64,sys_ni_syscall,sys32_sendfile64_wrapper)
78 SYSCALL(sys_setxattr,sys_setxattr,sys32_setxattr_wrapper)
79 SYSCALL(sys_lsetxattr,sys_lsetxattr,sys32_lsetxattr_wrapper) /* 225 */
80 SYSCALL(sys_fsetxattr,sys_fsetxattr,sys32_fsetxattr_wrapper)
81 @@ -245,11 +245,11 @@ SYSCALL(sys_removexattr,sys_removexattr,
82 SYSCALL(sys_lremovexattr,sys_lremovexattr,sys32_lremovexattr_wrapper)
83 SYSCALL(sys_fremovexattr,sys_fremovexattr,sys32_fremovexattr_wrapper) /* 235 */
84 SYSCALL(sys_gettid,sys_gettid,sys_gettid)
85 -SYSCALL(sys_tkill,sys_tkill,sys_tkill)
86 +SYSCALL(sys_tkill,sys_tkill,sys_tkill_wrapper)
87 SYSCALL(sys_futex,sys_futex,compat_sys_futex_wrapper)
88 SYSCALL(sys_sched_setaffinity,sys_sched_setaffinity,sys32_sched_setaffinity_wrapper)
89 SYSCALL(sys_sched_getaffinity,sys_sched_getaffinity,sys32_sched_getaffinity_wrapper) /* 240 */
90 -SYSCALL(sys_tgkill,sys_tgkill,sys_tgkill)
91 +SYSCALL(sys_tgkill,sys_tgkill,sys_tgkill_wrapper)
92 NI_SYSCALL /* reserved for TUX */
93 SYSCALL(sys_io_setup,sys_io_setup,sys32_io_setup_wrapper)
94 SYSCALL(sys_io_destroy,sys_io_destroy,sys32_io_destroy_wrapper)
95 @@ -288,7 +288,7 @@ SYSCALL(sys_mq_getsetattr,sys_mq_getseta
96 SYSCALL(sys_kexec_load,sys_kexec_load,compat_sys_kexec_load_wrapper)
97 SYSCALL(sys_add_key,sys_add_key,compat_sys_add_key_wrapper)
98 SYSCALL(sys_request_key,sys_request_key,compat_sys_request_key_wrapper)
99 -SYSCALL(sys_keyctl,sys_keyctl,compat_sys_keyctl) /* 280 */
100 +SYSCALL(sys_keyctl,sys_keyctl,compat_sys_keyctl_wrapper) /* 280 */
101 SYSCALL(sys_waitid,sys_waitid,compat_sys_waitid_wrapper)
102 SYSCALL(sys_ioprio_set,sys_ioprio_set,sys_ioprio_set_wrapper)
103 SYSCALL(sys_ioprio_get,sys_ioprio_get,sys_ioprio_get_wrapper)