diff options
-rw-r--r-- | arch/s390/kernel/Makefile | 1 | ||||
-rw-r--r-- | arch/s390/kernel/compat_wrap.c | 35 | ||||
-rw-r--r-- | arch/s390/kernel/compat_wrapper.S | 56 | ||||
-rw-r--r-- | arch/s390/kernel/syscalls.S | 24 |
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 | |||
50 | obj-$(CONFIG_COMPAT) += compat_linux.o compat_signal.o \ | 50 | obj-$(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) |
53 | obj-$(CONFIG_COMPAT) += compat_wrap.o | ||
53 | 54 | ||
54 | obj-$(CONFIG_STACKTRACE) += stacktrace.o | 55 | obj-$(CONFIG_STACKTRACE) += stacktrace.o |
55 | obj-$(CONFIG_KPROBES) += kprobes.o | 56 | obj-$(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 | |||
24 | COMPAT_SYSCALL_WRAP1(exit, int, error_code); | ||
25 | COMPAT_SYSCALL_WRAP1(close, unsigned int, fd); | ||
26 | COMPAT_SYSCALL_WRAP2(creat, const char __user *, pathname, umode_t, mode); | ||
27 | COMPAT_SYSCALL_WRAP2(link, const char __user *, oldname, const char __user *, newname); | ||
28 | COMPAT_SYSCALL_WRAP1(unlink, const char __user *, pathname); | ||
29 | COMPAT_SYSCALL_WRAP1(chdir, const char __user *, filename); | ||
30 | COMPAT_SYSCALL_WRAP3(mknod, const char __user *, filename, umode_t, mode, unsigned, dev); | ||
31 | COMPAT_SYSCALL_WRAP2(chmod, const char __user *, filename, umode_t, mode); | ||
32 | COMPAT_SYSCALL_WRAP1(oldumount, char __user *, name); | ||
33 | COMPAT_SYSCALL_WRAP1(alarm, unsigned int, seconds); | ||
34 | COMPAT_SYSCALL_WRAP2(access, const char __user *, filename, int, mode); | ||
35 | COMPAT_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 | ||
11 | ENTRY(sys32_exit_wrapper) | ||
12 | lgfr %r2,%r2 # int | ||
13 | jg sys_exit # branch to sys_exit | ||
14 | |||
15 | ENTRY(sys32_close_wrapper) | ||
16 | llgfr %r2,%r2 # unsigned int | ||
17 | jg sys_close # branch to system call | ||
18 | |||
19 | ENTRY(sys32_creat_wrapper) | ||
20 | llgtr %r2,%r2 # const char * | ||
21 | lgfr %r3,%r3 # int | ||
22 | jg sys_creat # branch to system call | ||
23 | |||
24 | ENTRY(sys32_link_wrapper) | ||
25 | llgtr %r2,%r2 # const char * | ||
26 | llgtr %r3,%r3 # const char * | ||
27 | jg sys_link # branch to system call | ||
28 | |||
29 | ENTRY(sys32_unlink_wrapper) | ||
30 | llgtr %r2,%r2 # const char * | ||
31 | jg sys_unlink # branch to system call | ||
32 | |||
33 | ENTRY(sys32_chdir_wrapper) | ||
34 | llgtr %r2,%r2 # const char * | ||
35 | jg sys_chdir # branch to system call | ||
36 | |||
37 | ENTRY(sys32_time_wrapper) | 11 | ENTRY(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 | ||
41 | ENTRY(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 | |||
47 | ENTRY(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 | ||
54 | ENTRY(sys32_mount_wrapper) | 17 | ENTRY(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 | ||
62 | ENTRY(sys32_oldumount_wrapper) | ||
63 | llgtr %r2,%r2 # char * | ||
64 | jg sys_oldumount # branch to system call | ||
65 | |||
66 | ENTRY(sys32_ptrace_wrapper) | 25 | ENTRY(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 | ||
73 | ENTRY(sys32_alarm_wrapper) | ||
74 | llgfr %r2,%r2 # unsigned int | ||
75 | jg sys_alarm # branch to system call | ||
76 | |||
77 | ENTRY(compat_sys_utime_wrapper) | 32 | ENTRY(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 | ||
82 | ENTRY(sys32_access_wrapper) | ||
83 | llgtr %r2,%r2 # const char * | ||
84 | lgfr %r3,%r3 # int | ||
85 | jg sys_access # branch to system call | ||
86 | |||
87 | ENTRY(sys32_nice_wrapper) | ||
88 | lgfr %r2,%r2 # int | ||
89 | jg sys_nice # branch to system call | ||
90 | |||
91 | #sys32_sync_wrapper # void | ||
92 | |||
93 | ENTRY(sys32_kill_wrapper) | 37 | ENTRY(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 | ||
11 | NI_SYSCALL /* 0 */ | 11 | NI_SYSCALL /* 0 */ |
12 | SYSCALL(sys_exit,sys_exit,sys32_exit_wrapper) | 12 | SYSCALL(sys_exit,sys_exit,compat_sys_exit) |
13 | SYSCALL(sys_fork,sys_fork,sys_fork) | 13 | SYSCALL(sys_fork,sys_fork,sys_fork) |
14 | SYSCALL(sys_read,sys_read,compat_sys_s390_read) | 14 | SYSCALL(sys_read,sys_read,compat_sys_s390_read) |
15 | SYSCALL(sys_write,sys_write,compat_sys_s390_write) | 15 | SYSCALL(sys_write,sys_write,compat_sys_s390_write) |
16 | SYSCALL(sys_open,sys_open,compat_sys_open) /* 5 */ | 16 | SYSCALL(sys_open,sys_open,compat_sys_open) /* 5 */ |
17 | SYSCALL(sys_close,sys_close,sys32_close_wrapper) | 17 | SYSCALL(sys_close,sys_close,compat_sys_close) |
18 | SYSCALL(sys_restart_syscall,sys_restart_syscall,sys_restart_syscall) | 18 | SYSCALL(sys_restart_syscall,sys_restart_syscall,sys_restart_syscall) |
19 | SYSCALL(sys_creat,sys_creat,sys32_creat_wrapper) | 19 | SYSCALL(sys_creat,sys_creat,compat_sys_creat) |
20 | SYSCALL(sys_link,sys_link,sys32_link_wrapper) | 20 | SYSCALL(sys_link,sys_link,compat_sys_link) |
21 | SYSCALL(sys_unlink,sys_unlink,sys32_unlink_wrapper) /* 10 */ | 21 | SYSCALL(sys_unlink,sys_unlink,compat_sys_unlink) /* 10 */ |
22 | SYSCALL(sys_execve,sys_execve,sys32_execve_wrapper) | 22 | SYSCALL(sys_execve,sys_execve,sys32_execve_wrapper) |
23 | SYSCALL(sys_chdir,sys_chdir,sys32_chdir_wrapper) | 23 | SYSCALL(sys_chdir,sys_chdir,compat_sys_chdir) |
24 | SYSCALL(sys_time,sys_ni_syscall,sys32_time_wrapper) /* old time syscall */ | 24 | SYSCALL(sys_time,sys_ni_syscall,sys32_time_wrapper) /* old time syscall */ |
25 | SYSCALL(sys_mknod,sys_mknod,sys32_mknod_wrapper) | 25 | SYSCALL(sys_mknod,sys_mknod,compat_sys_mknod) |
26 | SYSCALL(sys_chmod,sys_chmod,sys32_chmod_wrapper) /* 15 */ | 26 | SYSCALL(sys_chmod,sys_chmod,compat_sys_chmod) /* 15 */ |
27 | SYSCALL(sys_lchown16,sys_ni_syscall,compat_sys_s390_lchown16) /* old lchown16 syscall*/ | 27 | SYSCALL(sys_lchown16,sys_ni_syscall,compat_sys_s390_lchown16) /* old lchown16 syscall*/ |
28 | NI_SYSCALL /* old break syscall holder */ | 28 | NI_SYSCALL /* old break syscall holder */ |
29 | NI_SYSCALL /* old stat syscall holder */ | 29 | NI_SYSCALL /* old stat syscall holder */ |
30 | SYSCALL(sys_lseek,sys_lseek,compat_sys_lseek) | 30 | SYSCALL(sys_lseek,sys_lseek,compat_sys_lseek) |
31 | SYSCALL(sys_getpid,sys_getpid,sys_getpid) /* 20 */ | 31 | SYSCALL(sys_getpid,sys_getpid,sys_getpid) /* 20 */ |
32 | SYSCALL(sys_mount,sys_mount,sys32_mount_wrapper) | 32 | SYSCALL(sys_mount,sys_mount,sys32_mount_wrapper) |
33 | SYSCALL(sys_oldumount,sys_oldumount,sys32_oldumount_wrapper) | 33 | SYSCALL(sys_oldumount,sys_oldumount,compat_sys_oldumount) |
34 | SYSCALL(sys_setuid16,sys_ni_syscall,compat_sys_s390_setuid16) /* old setuid16 syscall*/ | 34 | SYSCALL(sys_setuid16,sys_ni_syscall,compat_sys_s390_setuid16) /* old setuid16 syscall*/ |
35 | SYSCALL(sys_getuid16,sys_ni_syscall,compat_sys_s390_getuid16) /* old getuid16 syscall*/ | 35 | SYSCALL(sys_getuid16,sys_ni_syscall,compat_sys_s390_getuid16) /* old getuid16 syscall*/ |
36 | SYSCALL(sys_stime,sys_ni_syscall,sys32_stime_wrapper) /* 25 old stime syscall */ | 36 | SYSCALL(sys_stime,sys_ni_syscall,sys32_stime_wrapper) /* 25 old stime syscall */ |
37 | SYSCALL(sys_ptrace,sys_ptrace,sys32_ptrace_wrapper) | 37 | SYSCALL(sys_ptrace,sys_ptrace,sys32_ptrace_wrapper) |
38 | SYSCALL(sys_alarm,sys_alarm,sys32_alarm_wrapper) | 38 | SYSCALL(sys_alarm,sys_alarm,compat_sys_alarm) |
39 | NI_SYSCALL /* old fstat syscall */ | 39 | NI_SYSCALL /* old fstat syscall */ |
40 | SYSCALL(sys_pause,sys_pause,sys_pause) | 40 | SYSCALL(sys_pause,sys_pause,sys_pause) |
41 | SYSCALL(sys_utime,sys_utime,compat_sys_utime_wrapper) /* 30 */ | 41 | SYSCALL(sys_utime,sys_utime,compat_sys_utime_wrapper) /* 30 */ |
42 | NI_SYSCALL /* old stty syscall */ | 42 | NI_SYSCALL /* old stty syscall */ |
43 | NI_SYSCALL /* old gtty syscall */ | 43 | NI_SYSCALL /* old gtty syscall */ |
44 | SYSCALL(sys_access,sys_access,sys32_access_wrapper) | 44 | SYSCALL(sys_access,sys_access,compat_sys_access) |
45 | SYSCALL(sys_nice,sys_nice,sys32_nice_wrapper) | 45 | SYSCALL(sys_nice,sys_nice,compat_sys_nice) |
46 | NI_SYSCALL /* 35 old ftime syscall */ | 46 | NI_SYSCALL /* 35 old ftime syscall */ |
47 | SYSCALL(sys_sync,sys_sync,sys_sync) | 47 | SYSCALL(sys_sync,sys_sync,sys_sync) |
48 | SYSCALL(sys_kill,sys_kill,sys32_kill_wrapper) | 48 | SYSCALL(sys_kill,sys_kill,sys32_kill_wrapper) |