]> git.ipfire.org Git - ipfire-2.x.git/blame - src/patches/suse-2.6.27.39/patches.arch/s390-08-07-compat_wrappers.patch
Imported linux-2.6.27.39 suse/xen patches.
[ipfire-2.x.git] / src / patches / suse-2.6.27.39 / patches.arch / s390-08-07-compat_wrappers.patch
CommitLineData
2cb7cef9
BS
1From: Gerald Schaefer <geraldsc@de.ibm.com>
2Subject: kernel: Add missing wrapper functions for 31 bit compat syscalls.
3References: bnc#466462,LTC#51229
4
5Symptom: 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.
7Problem: 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.
11Solution: Add wrapper functions that do the correct 31 bit to 64 bit
12 conversion.
13
14Acked-by: Hannes Reinecke <hare@suse.de>
15---
16 arch/s390/kernel/compat_wrapper.S | 38 ++++++++++++++++++++++++++++++++++++++
17 arch/s390/kernel/syscalls.S | 10 +++++-----
18 2 files changed, 43 insertions(+), 5 deletions(-)
19
20Index: 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:
26 lgfr %r2,%r2 # int
27 jg sys_epoll_create1 # branch to system call
28+
29+ .globl sys32_readahead_wrapper
30+sys32_readahead_wrapper:
31+ lgfr %r2,%r2 # int
32+ llgfr %r3,%r3 # u32
33+ llgfr %r4,%r4 # u32
34+ lgfr %r5,%r5 # s32
35+ jg sys32_readahead # branch to system call
36+
37+ .globl sys32_sendfile64_wrapper
38+sys32_sendfile64_wrapper:
39+ lgfr %r2,%r2 # int
40+ lgfr %r3,%r3 # int
41+ llgtr %r4,%r4 # compat_loff_t *
42+ lgfr %r5,%r5 # s32
43+ jg sys32_sendfile64 # branch to system call
44+
45+ .globl sys_tkill_wrapper
46+sys_tkill_wrapper:
47+ lgfr %r2,%r2 # pid_t
48+ lgfr %r3,%r3 # int
49+ jg sys_tkill # branch to system call
50+
51+ .globl sys_tgkill_wrapper
52+sys_tgkill_wrapper:
53+ lgfr %r2,%r2 # pid_t
54+ lgfr %r3,%r3 # pid_t
55+ lgfr %r4,%r4 # int
56+ jg sys_tgkill # branch to system call
57+
58+ .globl compat_sys_keyctl_wrapper
59+compat_sys_keyctl_wrapper:
60+ llgfr %r2,%r2 # u32
61+ llgfr %r3,%r3 # u32
62+ llgfr %r4,%r4 # u32
63+ llgfr %r5,%r5 # u32
64+ llgfr %r6,%r6 # u32
65+ jg compat_sys_keyctl # branch to system call
66Index: 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)