aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390
diff options
context:
space:
mode:
Diffstat (limited to 'arch/s390')
-rw-r--r--arch/s390/kernel/Makefile1
-rw-r--r--arch/s390/kernel/compat_wrap.c35
-rw-r--r--arch/s390/kernel/compat_wrapper.S56
-rw-r--r--arch/s390/kernel/syscalls.S24
4 files changed, 48 insertions, 68 deletions
diff --git a/arch/s390/kernel/Makefile b/arch/s390/kernel/Makefile
index 1b3ac09c11b6..725515f9c5db 100644
--- a/arch/s390/kernel/Makefile
+++ b/arch/s390/kernel/Makefile
@@ -50,6 +50,7 @@ compat-obj-$(CONFIG_AUDIT) += compat_audit.o
50obj-$(CONFIG_COMPAT) += compat_linux.o compat_signal.o \ 50obj-$(CONFIG_COMPAT) += compat_linux.o compat_signal.o \
51 compat_wrapper.o compat_exec_domain.o \ 51 compat_wrapper.o compat_exec_domain.o \
52 $(compat-obj-y) 52 $(compat-obj-y)
53obj-$(CONFIG_COMPAT) += compat_wrap.o
53 54
54obj-$(CONFIG_STACKTRACE) += stacktrace.o 55obj-$(CONFIG_STACKTRACE) += stacktrace.o
55obj-$(CONFIG_KPROBES) += kprobes.o 56obj-$(CONFIG_KPROBES) += kprobes.o
diff --git a/arch/s390/kernel/compat_wrap.c b/arch/s390/kernel/compat_wrap.c
new file mode 100644
index 000000000000..5357190c814e
--- /dev/null
+++ b/arch/s390/kernel/compat_wrap.c
@@ -0,0 +1,35 @@
1#include <linux/syscalls.h>
2#include <linux/compat.h>
3
4#define COMPAT_SYSCALL_WRAP1(name, ...) \
5 COMPAT_SYSCALL_WRAPx(1, _##name, __VA_ARGS__)
6#define COMPAT_SYSCALL_WRAP2(name, ...) \
7 COMPAT_SYSCALL_WRAPx(2, _##name, __VA_ARGS__)
8#define COMPAT_SYSCALL_WRAP3(name, ...) \
9 COMPAT_SYSCALL_WRAPx(3, _##name, __VA_ARGS__)
10#define COMPAT_SYSCALL_WRAP4(name, ...) \
11 COMPAT_SYSCALL_WRAPx(4, _##name, __VA_ARGS__)
12#define COMPAT_SYSCALL_WRAP5(name, ...) \
13 COMPAT_SYSCALL_WRAPx(5, _##name, __VA_ARGS__)
14#define COMPAT_SYSCALL_WRAP6(name, ...) \
15 COMPAT_SYSCALL_WRAPx(6, _##name, __VA_ARGS__)
16
17#define COMPAT_SYSCALL_WRAPx(x, name, ...) \
18 asmlinkage long compat_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)); \
19 asmlinkage long compat_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \
20 { \
21 return sys##name(__MAP(x,__SC_DELOUSE,__VA_ARGS__)); \
22 }
23
24COMPAT_SYSCALL_WRAP1(exit, int, error_code);
25COMPAT_SYSCALL_WRAP1(close, unsigned int, fd);
26COMPAT_SYSCALL_WRAP2(creat, const char __user *, pathname, umode_t, mode);
27COMPAT_SYSCALL_WRAP2(link, const char __user *, oldname, const char __user *, newname);
28COMPAT_SYSCALL_WRAP1(unlink, const char __user *, pathname);
29COMPAT_SYSCALL_WRAP1(chdir, const char __user *, filename);
30COMPAT_SYSCALL_WRAP3(mknod, const char __user *, filename, umode_t, mode, unsigned, dev);
31COMPAT_SYSCALL_WRAP2(chmod, const char __user *, filename, umode_t, mode);
32COMPAT_SYSCALL_WRAP1(oldumount, char __user *, name);
33COMPAT_SYSCALL_WRAP1(alarm, unsigned int, seconds);
34COMPAT_SYSCALL_WRAP2(access, const char __user *, filename, int, mode);
35COMPAT_SYSCALL_WRAP1(nice, int, increment);
diff --git a/arch/s390/kernel/compat_wrapper.S b/arch/s390/kernel/compat_wrapper.S
index 16ce71880cbd..09e65cd2e24e 100644
--- a/arch/s390/kernel/compat_wrapper.S
+++ b/arch/s390/kernel/compat_wrapper.S
@@ -8,47 +8,10 @@
8 8
9#include <linux/linkage.h> 9#include <linux/linkage.h>
10 10
11ENTRY(sys32_exit_wrapper)
12 lgfr %r2,%r2 # int
13 jg sys_exit # branch to sys_exit
14
15ENTRY(sys32_close_wrapper)
16 llgfr %r2,%r2 # unsigned int
17 jg sys_close # branch to system call
18
19ENTRY(sys32_creat_wrapper)
20 llgtr %r2,%r2 # const char *
21 lgfr %r3,%r3 # int
22 jg sys_creat # branch to system call
23
24ENTRY(sys32_link_wrapper)
25 llgtr %r2,%r2 # const char *
26 llgtr %r3,%r3 # const char *
27 jg sys_link # branch to system call
28
29ENTRY(sys32_unlink_wrapper)
30 llgtr %r2,%r2 # const char *
31 jg sys_unlink # branch to system call
32
33ENTRY(sys32_chdir_wrapper)
34 llgtr %r2,%r2 # const char *
35 jg sys_chdir # branch to system call
36
37ENTRY(sys32_time_wrapper) 11ENTRY(sys32_time_wrapper)
38 llgtr %r2,%r2 # int * 12 llgtr %r2,%r2 # int *
39 jg compat_sys_time # branch to system call 13 jg compat_sys_time # branch to system call
40 14
41ENTRY(sys32_mknod_wrapper)
42 llgtr %r2,%r2 # const char *
43 lgfr %r3,%r3 # int
44 llgfr %r4,%r4 # dev
45 jg sys_mknod # branch to system call
46
47ENTRY(sys32_chmod_wrapper)
48 llgtr %r2,%r2 # const char *
49 llgfr %r3,%r3 # mode_t
50 jg sys_chmod # branch to system call
51
52#sys32_getpid_wrapper # void 15#sys32_getpid_wrapper # void
53 16
54ENTRY(sys32_mount_wrapper) 17ENTRY(sys32_mount_wrapper)
@@ -59,10 +22,6 @@ ENTRY(sys32_mount_wrapper)
59 llgtr %r6,%r6 # void * 22 llgtr %r6,%r6 # void *
60 jg compat_sys_mount # branch to system call 23 jg compat_sys_mount # branch to system call
61 24
62ENTRY(sys32_oldumount_wrapper)
63 llgtr %r2,%r2 # char *
64 jg sys_oldumount # branch to system call
65
66ENTRY(sys32_ptrace_wrapper) 25ENTRY(sys32_ptrace_wrapper)
67 lgfr %r2,%r2 # long 26 lgfr %r2,%r2 # long
68 lgfr %r3,%r3 # long 27 lgfr %r3,%r3 # long
@@ -70,26 +29,11 @@ ENTRY(sys32_ptrace_wrapper)
70 llgfr %r5,%r5 # long 29 llgfr %r5,%r5 # long
71 jg compat_sys_ptrace # branch to system call 30 jg compat_sys_ptrace # branch to system call
72 31
73ENTRY(sys32_alarm_wrapper)
74 llgfr %r2,%r2 # unsigned int
75 jg sys_alarm # branch to system call
76
77ENTRY(compat_sys_utime_wrapper) 32ENTRY(compat_sys_utime_wrapper)
78 llgtr %r2,%r2 # char * 33 llgtr %r2,%r2 # char *
79 llgtr %r3,%r3 # struct compat_utimbuf * 34 llgtr %r3,%r3 # struct compat_utimbuf *
80 jg compat_sys_utime # branch to system call 35 jg compat_sys_utime # branch to system call
81 36
82ENTRY(sys32_access_wrapper)
83 llgtr %r2,%r2 # const char *
84 lgfr %r3,%r3 # int
85 jg sys_access # branch to system call
86
87ENTRY(sys32_nice_wrapper)
88 lgfr %r2,%r2 # int
89 jg sys_nice # branch to system call
90
91#sys32_sync_wrapper # void
92
93ENTRY(sys32_kill_wrapper) 37ENTRY(sys32_kill_wrapper)
94 lgfr %r2,%r2 # int 38 lgfr %r2,%r2 # int
95 lgfr %r3,%r3 # int 39 lgfr %r3,%r3 # int
diff --git a/arch/s390/kernel/syscalls.S b/arch/s390/kernel/syscalls.S
index 5a83f6a52c0e..ec1de1b3ecd2 100644
--- a/arch/s390/kernel/syscalls.S
+++ b/arch/s390/kernel/syscalls.S
@@ -9,40 +9,40 @@
9#define NI_SYSCALL SYSCALL(sys_ni_syscall,sys_ni_syscall,sys_ni_syscall) 9#define NI_SYSCALL SYSCALL(sys_ni_syscall,sys_ni_syscall,sys_ni_syscall)
10 10
11NI_SYSCALL /* 0 */ 11NI_SYSCALL /* 0 */
12SYSCALL(sys_exit,sys_exit,sys32_exit_wrapper) 12SYSCALL(sys_exit,sys_exit,compat_sys_exit)
13SYSCALL(sys_fork,sys_fork,sys_fork) 13SYSCALL(sys_fork,sys_fork,sys_fork)
14SYSCALL(sys_read,sys_read,compat_sys_s390_read) 14SYSCALL(sys_read,sys_read,compat_sys_s390_read)
15SYSCALL(sys_write,sys_write,compat_sys_s390_write) 15SYSCALL(sys_write,sys_write,compat_sys_s390_write)
16SYSCALL(sys_open,sys_open,compat_sys_open) /* 5 */ 16SYSCALL(sys_open,sys_open,compat_sys_open) /* 5 */
17SYSCALL(sys_close,sys_close,sys32_close_wrapper) 17SYSCALL(sys_close,sys_close,compat_sys_close)
18SYSCALL(sys_restart_syscall,sys_restart_syscall,sys_restart_syscall) 18SYSCALL(sys_restart_syscall,sys_restart_syscall,sys_restart_syscall)
19SYSCALL(sys_creat,sys_creat,sys32_creat_wrapper) 19SYSCALL(sys_creat,sys_creat,compat_sys_creat)
20SYSCALL(sys_link,sys_link,sys32_link_wrapper) 20SYSCALL(sys_link,sys_link,compat_sys_link)
21SYSCALL(sys_unlink,sys_unlink,sys32_unlink_wrapper) /* 10 */ 21SYSCALL(sys_unlink,sys_unlink,compat_sys_unlink) /* 10 */
22SYSCALL(sys_execve,sys_execve,sys32_execve_wrapper) 22SYSCALL(sys_execve,sys_execve,sys32_execve_wrapper)
23SYSCALL(sys_chdir,sys_chdir,sys32_chdir_wrapper) 23SYSCALL(sys_chdir,sys_chdir,compat_sys_chdir)
24SYSCALL(sys_time,sys_ni_syscall,sys32_time_wrapper) /* old time syscall */ 24SYSCALL(sys_time,sys_ni_syscall,sys32_time_wrapper) /* old time syscall */
25SYSCALL(sys_mknod,sys_mknod,sys32_mknod_wrapper) 25SYSCALL(sys_mknod,sys_mknod,compat_sys_mknod)
26SYSCALL(sys_chmod,sys_chmod,sys32_chmod_wrapper) /* 15 */ 26SYSCALL(sys_chmod,sys_chmod,compat_sys_chmod) /* 15 */
27SYSCALL(sys_lchown16,sys_ni_syscall,compat_sys_s390_lchown16) /* old lchown16 syscall*/ 27SYSCALL(sys_lchown16,sys_ni_syscall,compat_sys_s390_lchown16) /* old lchown16 syscall*/
28NI_SYSCALL /* old break syscall holder */ 28NI_SYSCALL /* old break syscall holder */
29NI_SYSCALL /* old stat syscall holder */ 29NI_SYSCALL /* old stat syscall holder */
30SYSCALL(sys_lseek,sys_lseek,compat_sys_lseek) 30SYSCALL(sys_lseek,sys_lseek,compat_sys_lseek)
31SYSCALL(sys_getpid,sys_getpid,sys_getpid) /* 20 */ 31SYSCALL(sys_getpid,sys_getpid,sys_getpid) /* 20 */
32SYSCALL(sys_mount,sys_mount,sys32_mount_wrapper) 32SYSCALL(sys_mount,sys_mount,sys32_mount_wrapper)
33SYSCALL(sys_oldumount,sys_oldumount,sys32_oldumount_wrapper) 33SYSCALL(sys_oldumount,sys_oldumount,compat_sys_oldumount)
34SYSCALL(sys_setuid16,sys_ni_syscall,compat_sys_s390_setuid16) /* old setuid16 syscall*/ 34SYSCALL(sys_setuid16,sys_ni_syscall,compat_sys_s390_setuid16) /* old setuid16 syscall*/
35SYSCALL(sys_getuid16,sys_ni_syscall,compat_sys_s390_getuid16) /* old getuid16 syscall*/ 35SYSCALL(sys_getuid16,sys_ni_syscall,compat_sys_s390_getuid16) /* old getuid16 syscall*/
36SYSCALL(sys_stime,sys_ni_syscall,sys32_stime_wrapper) /* 25 old stime syscall */ 36SYSCALL(sys_stime,sys_ni_syscall,sys32_stime_wrapper) /* 25 old stime syscall */
37SYSCALL(sys_ptrace,sys_ptrace,sys32_ptrace_wrapper) 37SYSCALL(sys_ptrace,sys_ptrace,sys32_ptrace_wrapper)
38SYSCALL(sys_alarm,sys_alarm,sys32_alarm_wrapper) 38SYSCALL(sys_alarm,sys_alarm,compat_sys_alarm)
39NI_SYSCALL /* old fstat syscall */ 39NI_SYSCALL /* old fstat syscall */
40SYSCALL(sys_pause,sys_pause,sys_pause) 40SYSCALL(sys_pause,sys_pause,sys_pause)
41SYSCALL(sys_utime,sys_utime,compat_sys_utime_wrapper) /* 30 */ 41SYSCALL(sys_utime,sys_utime,compat_sys_utime_wrapper) /* 30 */
42NI_SYSCALL /* old stty syscall */ 42NI_SYSCALL /* old stty syscall */
43NI_SYSCALL /* old gtty syscall */ 43NI_SYSCALL /* old gtty syscall */
44SYSCALL(sys_access,sys_access,sys32_access_wrapper) 44SYSCALL(sys_access,sys_access,compat_sys_access)
45SYSCALL(sys_nice,sys_nice,sys32_nice_wrapper) 45SYSCALL(sys_nice,sys_nice,compat_sys_nice)
46NI_SYSCALL /* 35 old ftime syscall */ 46NI_SYSCALL /* 35 old ftime syscall */
47SYSCALL(sys_sync,sys_sync,sys_sync) 47SYSCALL(sys_sync,sys_sync,sys_sync)
48SYSCALL(sys_kill,sys_kill,sys32_kill_wrapper) 48SYSCALL(sys_kill,sys_kill,sys32_kill_wrapper)