]> git.ipfire.org Git - ipfire-2.x.git/blob - src/patches/suse-2.6.27.39/patches.arch/s390-08-07-compat_wrappers.patch
Fix oinkmaster patch.
[ipfire-2.x.git] / src / patches / suse-2.6.27.39 / patches.arch / s390-08-07-compat_wrappers.patch
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
4
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
12 conversion.
13
14 Acked-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
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:
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
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)