diff options
41 files changed, 124 insertions, 1259 deletions
diff --git a/arch/arm/include/asm/unistd.h b/arch/arm/include/asm/unistd.h index e6eeb2d29953..dd2bf53000fe 100644 --- a/arch/arm/include/asm/unistd.h +++ b/arch/arm/include/asm/unistd.h | |||
@@ -448,6 +448,7 @@ | |||
448 | 448 | ||
449 | #if !defined(CONFIG_AEABI) || defined(CONFIG_OABI_COMPAT) | 449 | #if !defined(CONFIG_AEABI) || defined(CONFIG_OABI_COMPAT) |
450 | #define __ARCH_WANT_SYS_TIME | 450 | #define __ARCH_WANT_SYS_TIME |
451 | #define __ARCH_WANT_SYS_IPC | ||
451 | #define __ARCH_WANT_SYS_OLDUMOUNT | 452 | #define __ARCH_WANT_SYS_OLDUMOUNT |
452 | #define __ARCH_WANT_SYS_ALARM | 453 | #define __ARCH_WANT_SYS_ALARM |
453 | #define __ARCH_WANT_SYS_UTIME | 454 | #define __ARCH_WANT_SYS_UTIME |
diff --git a/arch/arm/kernel/sys_arm.c b/arch/arm/kernel/sys_arm.c index a2e0e6f2ea7f..4350f75e578c 100644 --- a/arch/arm/kernel/sys_arm.c +++ b/arch/arm/kernel/sys_arm.c | |||
@@ -28,88 +28,6 @@ | |||
28 | #include <linux/ipc.h> | 28 | #include <linux/ipc.h> |
29 | #include <linux/uaccess.h> | 29 | #include <linux/uaccess.h> |
30 | 30 | ||
31 | #if !defined(CONFIG_AEABI) || defined(CONFIG_OABI_COMPAT) | ||
32 | /* | ||
33 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
34 | * | ||
35 | * This is really horribly ugly. | ||
36 | */ | ||
37 | asmlinkage int sys_ipc(uint call, int first, int second, int third, | ||
38 | void __user *ptr, long fifth) | ||
39 | { | ||
40 | int version, ret; | ||
41 | |||
42 | version = call >> 16; /* hack for backward compatibility */ | ||
43 | call &= 0xffff; | ||
44 | |||
45 | switch (call) { | ||
46 | case SEMOP: | ||
47 | return sys_semtimedop (first, (struct sembuf __user *)ptr, second, NULL); | ||
48 | case SEMTIMEDOP: | ||
49 | return sys_semtimedop(first, (struct sembuf __user *)ptr, second, | ||
50 | (const struct timespec __user *)fifth); | ||
51 | |||
52 | case SEMGET: | ||
53 | return sys_semget (first, second, third); | ||
54 | case SEMCTL: { | ||
55 | union semun fourth; | ||
56 | if (!ptr) | ||
57 | return -EINVAL; | ||
58 | if (get_user(fourth.__pad, (void __user * __user *) ptr)) | ||
59 | return -EFAULT; | ||
60 | return sys_semctl (first, second, third, fourth); | ||
61 | } | ||
62 | |||
63 | case MSGSND: | ||
64 | return sys_msgsnd(first, (struct msgbuf __user *) ptr, | ||
65 | second, third); | ||
66 | case MSGRCV: | ||
67 | switch (version) { | ||
68 | case 0: { | ||
69 | struct ipc_kludge tmp; | ||
70 | if (!ptr) | ||
71 | return -EINVAL; | ||
72 | if (copy_from_user(&tmp,(struct ipc_kludge __user *)ptr, | ||
73 | sizeof (tmp))) | ||
74 | return -EFAULT; | ||
75 | return sys_msgrcv (first, tmp.msgp, second, | ||
76 | tmp.msgtyp, third); | ||
77 | } | ||
78 | default: | ||
79 | return sys_msgrcv (first, | ||
80 | (struct msgbuf __user *) ptr, | ||
81 | second, fifth, third); | ||
82 | } | ||
83 | case MSGGET: | ||
84 | return sys_msgget ((key_t) first, second); | ||
85 | case MSGCTL: | ||
86 | return sys_msgctl(first, second, (struct msqid_ds __user *)ptr); | ||
87 | |||
88 | case SHMAT: | ||
89 | switch (version) { | ||
90 | default: { | ||
91 | ulong raddr; | ||
92 | ret = do_shmat(first, (char __user *)ptr, second, &raddr); | ||
93 | if (ret) | ||
94 | return ret; | ||
95 | return put_user(raddr, (ulong __user *)third); | ||
96 | } | ||
97 | case 1: /* Of course, we don't support iBCS2! */ | ||
98 | return -EINVAL; | ||
99 | } | ||
100 | case SHMDT: | ||
101 | return sys_shmdt ((char __user *)ptr); | ||
102 | case SHMGET: | ||
103 | return sys_shmget (first, second, third); | ||
104 | case SHMCTL: | ||
105 | return sys_shmctl (first, second, | ||
106 | (struct shmid_ds __user *) ptr); | ||
107 | default: | ||
108 | return -ENOSYS; | ||
109 | } | ||
110 | } | ||
111 | #endif | ||
112 | |||
113 | /* Fork a new task - this creates a new program thread. | 31 | /* Fork a new task - this creates a new program thread. |
114 | * This is called indirectly via a small wrapper | 32 | * This is called indirectly via a small wrapper |
115 | */ | 33 | */ |
diff --git a/arch/arm/kernel/sys_oabi-compat.c b/arch/arm/kernel/sys_oabi-compat.c index d59a0cd537f0..33ff678e32f2 100644 --- a/arch/arm/kernel/sys_oabi-compat.c +++ b/arch/arm/kernel/sys_oabi-compat.c | |||
@@ -346,9 +346,6 @@ asmlinkage long sys_oabi_semop(int semid, struct oabi_sembuf __user *tsops, | |||
346 | return sys_oabi_semtimedop(semid, tsops, nsops, NULL); | 346 | return sys_oabi_semtimedop(semid, tsops, nsops, NULL); |
347 | } | 347 | } |
348 | 348 | ||
349 | extern asmlinkage int sys_ipc(uint call, int first, int second, int third, | ||
350 | void __user *ptr, long fifth); | ||
351 | |||
352 | asmlinkage int sys_oabi_ipc(uint call, int first, int second, int third, | 349 | asmlinkage int sys_oabi_ipc(uint call, int first, int second, int third, |
353 | void __user *ptr, long fifth) | 350 | void __user *ptr, long fifth) |
354 | { | 351 | { |
diff --git a/arch/cris/include/asm/unistd.h b/arch/cris/include/asm/unistd.h index 8cffd22623fd..f6fad83b3a8c 100644 --- a/arch/cris/include/asm/unistd.h +++ b/arch/cris/include/asm/unistd.h | |||
@@ -352,6 +352,7 @@ | |||
352 | #define __ARCH_WANT_STAT64 | 352 | #define __ARCH_WANT_STAT64 |
353 | #define __ARCH_WANT_SYS_ALARM | 353 | #define __ARCH_WANT_SYS_ALARM |
354 | #define __ARCH_WANT_SYS_GETHOSTNAME | 354 | #define __ARCH_WANT_SYS_GETHOSTNAME |
355 | #define __ARCH_WANT_SYS_IPC | ||
355 | #define __ARCH_WANT_SYS_PAUSE | 356 | #define __ARCH_WANT_SYS_PAUSE |
356 | #define __ARCH_WANT_SYS_SGETMASK | 357 | #define __ARCH_WANT_SYS_SGETMASK |
357 | #define __ARCH_WANT_SYS_SIGNAL | 358 | #define __ARCH_WANT_SYS_SIGNAL |
diff --git a/arch/cris/kernel/sys_cris.c b/arch/cris/kernel/sys_cris.c index 22f9d6cd947f..7aa036ec78ff 100644 --- a/arch/cris/kernel/sys_cris.c +++ b/arch/cris/kernel/sys_cris.c | |||
@@ -33,81 +33,3 @@ sys_mmap2(unsigned long addr, unsigned long len, unsigned long prot, | |||
33 | /* bug(?): 8Kb pages here */ | 33 | /* bug(?): 8Kb pages here */ |
34 | return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff); | 34 | return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff); |
35 | } | 35 | } |
36 | |||
37 | /* | ||
38 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
39 | * | ||
40 | * This is really horribly ugly. (same as arch/i386) | ||
41 | */ | ||
42 | |||
43 | asmlinkage int sys_ipc (uint call, int first, int second, | ||
44 | int third, void __user *ptr, long fifth) | ||
45 | { | ||
46 | int version, ret; | ||
47 | |||
48 | version = call >> 16; /* hack for backward compatibility */ | ||
49 | call &= 0xffff; | ||
50 | |||
51 | switch (call) { | ||
52 | case SEMOP: | ||
53 | return sys_semtimedop (first, (struct sembuf __user *)ptr, second, NULL); | ||
54 | case SEMTIMEDOP: | ||
55 | return sys_semtimedop(first, (struct sembuf __user *)ptr, second, | ||
56 | (const struct timespec __user *)fifth); | ||
57 | |||
58 | case SEMGET: | ||
59 | return sys_semget (first, second, third); | ||
60 | case SEMCTL: { | ||
61 | union semun fourth; | ||
62 | if (!ptr) | ||
63 | return -EINVAL; | ||
64 | if (get_user(fourth.__pad, (void * __user *) ptr)) | ||
65 | return -EFAULT; | ||
66 | return sys_semctl (first, second, third, fourth); | ||
67 | } | ||
68 | |||
69 | case MSGSND: | ||
70 | return sys_msgsnd (first, (struct msgbuf __user *) ptr, | ||
71 | second, third); | ||
72 | case MSGRCV: | ||
73 | switch (version) { | ||
74 | case 0: { | ||
75 | struct ipc_kludge tmp; | ||
76 | if (!ptr) | ||
77 | return -EINVAL; | ||
78 | |||
79 | if (copy_from_user(&tmp, | ||
80 | (struct ipc_kludge __user *) ptr, | ||
81 | sizeof (tmp))) | ||
82 | return -EFAULT; | ||
83 | return sys_msgrcv (first, tmp.msgp, second, | ||
84 | tmp.msgtyp, third); | ||
85 | } | ||
86 | default: | ||
87 | return sys_msgrcv (first, | ||
88 | (struct msgbuf __user *) ptr, | ||
89 | second, fifth, third); | ||
90 | } | ||
91 | case MSGGET: | ||
92 | return sys_msgget ((key_t) first, second); | ||
93 | case MSGCTL: | ||
94 | return sys_msgctl (first, second, (struct msqid_ds __user *) ptr); | ||
95 | |||
96 | case SHMAT: { | ||
97 | ulong raddr; | ||
98 | ret = do_shmat (first, (char __user *) ptr, second, &raddr); | ||
99 | if (ret) | ||
100 | return ret; | ||
101 | return put_user (raddr, (ulong __user *) third); | ||
102 | } | ||
103 | case SHMDT: | ||
104 | return sys_shmdt ((char __user *)ptr); | ||
105 | case SHMGET: | ||
106 | return sys_shmget (first, second, third); | ||
107 | case SHMCTL: | ||
108 | return sys_shmctl (first, second, | ||
109 | (struct shmid_ds __user *) ptr); | ||
110 | default: | ||
111 | return -ENOSYS; | ||
112 | } | ||
113 | } | ||
diff --git a/arch/frv/include/asm/unistd.h b/arch/frv/include/asm/unistd.h index be6ef0f5cd42..b28da499e22a 100644 --- a/arch/frv/include/asm/unistd.h +++ b/arch/frv/include/asm/unistd.h | |||
@@ -354,6 +354,7 @@ | |||
354 | #define __ARCH_WANT_STAT64 | 354 | #define __ARCH_WANT_STAT64 |
355 | #define __ARCH_WANT_SYS_ALARM | 355 | #define __ARCH_WANT_SYS_ALARM |
356 | /* #define __ARCH_WANT_SYS_GETHOSTNAME */ | 356 | /* #define __ARCH_WANT_SYS_GETHOSTNAME */ |
357 | #define __ARCH_WANT_SYS_IPC | ||
357 | #define __ARCH_WANT_SYS_PAUSE | 358 | #define __ARCH_WANT_SYS_PAUSE |
358 | /* #define __ARCH_WANT_SYS_SGETMASK */ | 359 | /* #define __ARCH_WANT_SYS_SGETMASK */ |
359 | /* #define __ARCH_WANT_SYS_SIGNAL */ | 360 | /* #define __ARCH_WANT_SYS_SIGNAL */ |
diff --git a/arch/frv/kernel/sys_frv.c b/arch/frv/kernel/sys_frv.c index 1d3d4c9e2521..9c4980825bbb 100644 --- a/arch/frv/kernel/sys_frv.c +++ b/arch/frv/kernel/sys_frv.c | |||
@@ -42,92 +42,3 @@ asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, | |||
42 | return sys_mmap_pgoff(addr, len, prot, flags, fd, | 42 | return sys_mmap_pgoff(addr, len, prot, flags, fd, |
43 | pgoff >> (PAGE_SHIFT - 12)); | 43 | pgoff >> (PAGE_SHIFT - 12)); |
44 | } | 44 | } |
45 | |||
46 | /* | ||
47 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
48 | * | ||
49 | * This is really horribly ugly. | ||
50 | */ | ||
51 | asmlinkage long sys_ipc(unsigned long call, | ||
52 | unsigned long first, | ||
53 | unsigned long second, | ||
54 | unsigned long third, | ||
55 | void __user *ptr, | ||
56 | unsigned long fifth) | ||
57 | { | ||
58 | int version, ret; | ||
59 | |||
60 | version = call >> 16; /* hack for backward compatibility */ | ||
61 | call &= 0xffff; | ||
62 | |||
63 | switch (call) { | ||
64 | case SEMOP: | ||
65 | return sys_semtimedop(first, (struct sembuf __user *)ptr, second, NULL); | ||
66 | case SEMTIMEDOP: | ||
67 | return sys_semtimedop(first, (struct sembuf __user *)ptr, second, | ||
68 | (const struct timespec __user *)fifth); | ||
69 | |||
70 | case SEMGET: | ||
71 | return sys_semget (first, second, third); | ||
72 | case SEMCTL: { | ||
73 | union semun fourth; | ||
74 | if (!ptr) | ||
75 | return -EINVAL; | ||
76 | if (get_user(fourth.__pad, (void * __user *) ptr)) | ||
77 | return -EFAULT; | ||
78 | return sys_semctl (first, second, third, fourth); | ||
79 | } | ||
80 | |||
81 | case MSGSND: | ||
82 | return sys_msgsnd (first, (struct msgbuf __user *) ptr, | ||
83 | second, third); | ||
84 | case MSGRCV: | ||
85 | switch (version) { | ||
86 | case 0: { | ||
87 | struct ipc_kludge tmp; | ||
88 | if (!ptr) | ||
89 | return -EINVAL; | ||
90 | |||
91 | if (copy_from_user(&tmp, | ||
92 | (struct ipc_kludge __user *) ptr, | ||
93 | sizeof (tmp))) | ||
94 | return -EFAULT; | ||
95 | return sys_msgrcv (first, tmp.msgp, second, | ||
96 | tmp.msgtyp, third); | ||
97 | } | ||
98 | default: | ||
99 | return sys_msgrcv (first, | ||
100 | (struct msgbuf __user *) ptr, | ||
101 | second, fifth, third); | ||
102 | } | ||
103 | case MSGGET: | ||
104 | return sys_msgget ((key_t) first, second); | ||
105 | case MSGCTL: | ||
106 | return sys_msgctl (first, second, (struct msqid_ds __user *) ptr); | ||
107 | |||
108 | case SHMAT: | ||
109 | switch (version) { | ||
110 | default: { | ||
111 | ulong raddr; | ||
112 | ret = do_shmat (first, (char __user *) ptr, second, &raddr); | ||
113 | if (ret) | ||
114 | return ret; | ||
115 | return put_user (raddr, (ulong __user *) third); | ||
116 | } | ||
117 | case 1: /* iBCS2 emulator entry point */ | ||
118 | if (!segment_eq(get_fs(), get_ds())) | ||
119 | return -EINVAL; | ||
120 | /* The "(ulong *) third" is valid _only_ because of the kernel segment thing */ | ||
121 | return do_shmat (first, (char __user *) ptr, second, (ulong *) third); | ||
122 | } | ||
123 | case SHMDT: | ||
124 | return sys_shmdt ((char __user *)ptr); | ||
125 | case SHMGET: | ||
126 | return sys_shmget (first, second, third); | ||
127 | case SHMCTL: | ||
128 | return sys_shmctl (first, second, | ||
129 | (struct shmid_ds __user *) ptr); | ||
130 | default: | ||
131 | return -ENOSYS; | ||
132 | } | ||
133 | } | ||
diff --git a/arch/h8300/include/asm/unistd.h b/arch/h8300/include/asm/unistd.h index 54dab4726954..50f2c5a36591 100644 --- a/arch/h8300/include/asm/unistd.h +++ b/arch/h8300/include/asm/unistd.h | |||
@@ -336,6 +336,7 @@ | |||
336 | #define __ARCH_WANT_STAT64 | 336 | #define __ARCH_WANT_STAT64 |
337 | #define __ARCH_WANT_SYS_ALARM | 337 | #define __ARCH_WANT_SYS_ALARM |
338 | #define __ARCH_WANT_SYS_GETHOSTNAME | 338 | #define __ARCH_WANT_SYS_GETHOSTNAME |
339 | #define __ARCH_WANT_SYS_IPC | ||
339 | #define __ARCH_WANT_SYS_PAUSE | 340 | #define __ARCH_WANT_SYS_PAUSE |
340 | #define __ARCH_WANT_SYS_SGETMASK | 341 | #define __ARCH_WANT_SYS_SGETMASK |
341 | #define __ARCH_WANT_SYS_SIGNAL | 342 | #define __ARCH_WANT_SYS_SIGNAL |
diff --git a/arch/h8300/kernel/sys_h8300.c b/arch/h8300/kernel/sys_h8300.c index 1f13fd6e5309..f9b3f44da69f 100644 --- a/arch/h8300/kernel/sys_h8300.c +++ b/arch/h8300/kernel/sys_h8300.c | |||
@@ -26,94 +26,6 @@ | |||
26 | #include <asm/traps.h> | 26 | #include <asm/traps.h> |
27 | #include <asm/unistd.h> | 27 | #include <asm/unistd.h> |
28 | 28 | ||
29 | /* | ||
30 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
31 | * | ||
32 | * This is really horribly ugly. | ||
33 | */ | ||
34 | asmlinkage int sys_ipc (uint call, int first, int second, | ||
35 | int third, void *ptr, long fifth) | ||
36 | { | ||
37 | int version, ret; | ||
38 | |||
39 | version = call >> 16; /* hack for backward compatibility */ | ||
40 | call &= 0xffff; | ||
41 | |||
42 | if (call <= SEMCTL) | ||
43 | switch (call) { | ||
44 | case SEMOP: | ||
45 | return sys_semop (first, (struct sembuf *)ptr, second); | ||
46 | case SEMGET: | ||
47 | return sys_semget (first, second, third); | ||
48 | case SEMCTL: { | ||
49 | union semun fourth; | ||
50 | if (!ptr) | ||
51 | return -EINVAL; | ||
52 | if (get_user(fourth.__pad, (void **) ptr)) | ||
53 | return -EFAULT; | ||
54 | return sys_semctl (first, second, third, fourth); | ||
55 | } | ||
56 | default: | ||
57 | return -EINVAL; | ||
58 | } | ||
59 | if (call <= MSGCTL) | ||
60 | switch (call) { | ||
61 | case MSGSND: | ||
62 | return sys_msgsnd (first, (struct msgbuf *) ptr, | ||
63 | second, third); | ||
64 | case MSGRCV: | ||
65 | switch (version) { | ||
66 | case 0: { | ||
67 | struct ipc_kludge tmp; | ||
68 | if (!ptr) | ||
69 | return -EINVAL; | ||
70 | if (copy_from_user (&tmp, | ||
71 | (struct ipc_kludge *)ptr, | ||
72 | sizeof (tmp))) | ||
73 | return -EFAULT; | ||
74 | return sys_msgrcv (first, tmp.msgp, second, | ||
75 | tmp.msgtyp, third); | ||
76 | } | ||
77 | default: | ||
78 | return sys_msgrcv (first, | ||
79 | (struct msgbuf *) ptr, | ||
80 | second, fifth, third); | ||
81 | } | ||
82 | case MSGGET: | ||
83 | return sys_msgget ((key_t) first, second); | ||
84 | case MSGCTL: | ||
85 | return sys_msgctl (first, second, | ||
86 | (struct msqid_ds *) ptr); | ||
87 | default: | ||
88 | return -EINVAL; | ||
89 | } | ||
90 | if (call <= SHMCTL) | ||
91 | switch (call) { | ||
92 | case SHMAT: | ||
93 | switch (version) { | ||
94 | default: { | ||
95 | ulong raddr; | ||
96 | ret = do_shmat (first, (char *) ptr, | ||
97 | second, &raddr); | ||
98 | if (ret) | ||
99 | return ret; | ||
100 | return put_user (raddr, (ulong *) third); | ||
101 | } | ||
102 | } | ||
103 | case SHMDT: | ||
104 | return sys_shmdt ((char *)ptr); | ||
105 | case SHMGET: | ||
106 | return sys_shmget (first, second, third); | ||
107 | case SHMCTL: | ||
108 | return sys_shmctl (first, second, | ||
109 | (struct shmid_ds *) ptr); | ||
110 | default: | ||
111 | return -EINVAL; | ||
112 | } | ||
113 | |||
114 | return -EINVAL; | ||
115 | } | ||
116 | |||
117 | /* sys_cacheflush -- no support. */ | 29 | /* sys_cacheflush -- no support. */ |
118 | asmlinkage int | 30 | asmlinkage int |
119 | sys_cacheflush (unsigned long addr, int scope, int cache, unsigned long len) | 31 | sys_cacheflush (unsigned long addr, int scope, int cache, unsigned long len) |
diff --git a/arch/m32r/include/asm/unistd.h b/arch/m32r/include/asm/unistd.h index cf701c933249..76125777483c 100644 --- a/arch/m32r/include/asm/unistd.h +++ b/arch/m32r/include/asm/unistd.h | |||
@@ -339,6 +339,7 @@ | |||
339 | #define __ARCH_WANT_STAT64 | 339 | #define __ARCH_WANT_STAT64 |
340 | #define __ARCH_WANT_SYS_ALARM | 340 | #define __ARCH_WANT_SYS_ALARM |
341 | #define __ARCH_WANT_SYS_GETHOSTNAME | 341 | #define __ARCH_WANT_SYS_GETHOSTNAME |
342 | #define __ARCH_WANT_SYS_IPC | ||
342 | #define __ARCH_WANT_SYS_PAUSE | 343 | #define __ARCH_WANT_SYS_PAUSE |
343 | #define __ARCH_WANT_SYS_TIME | 344 | #define __ARCH_WANT_SYS_TIME |
344 | #define __ARCH_WANT_SYS_UTIME | 345 | #define __ARCH_WANT_SYS_UTIME |
diff --git a/arch/m32r/kernel/sys_m32r.c b/arch/m32r/kernel/sys_m32r.c index d3c865c5a6ba..cf2e7279ce9b 100644 --- a/arch/m32r/kernel/sys_m32r.c +++ b/arch/m32r/kernel/sys_m32r.c | |||
@@ -76,87 +76,6 @@ asmlinkage int sys_tas(int __user *addr) | |||
76 | return oldval; | 76 | return oldval; |
77 | } | 77 | } |
78 | 78 | ||
79 | /* | ||
80 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
81 | * | ||
82 | * This is really horribly ugly. | ||
83 | */ | ||
84 | asmlinkage int sys_ipc(uint call, int first, int second, | ||
85 | int third, void __user *ptr, long fifth) | ||
86 | { | ||
87 | int version, ret; | ||
88 | |||
89 | version = call >> 16; /* hack for backward compatibility */ | ||
90 | call &= 0xffff; | ||
91 | |||
92 | switch (call) { | ||
93 | case SEMOP: | ||
94 | return sys_semtimedop(first, (struct sembuf __user *)ptr, | ||
95 | second, NULL); | ||
96 | case SEMTIMEDOP: | ||
97 | return sys_semtimedop(first, (struct sembuf __user *)ptr, | ||
98 | second, (const struct timespec __user *)fifth); | ||
99 | case SEMGET: | ||
100 | return sys_semget (first, second, third); | ||
101 | case SEMCTL: { | ||
102 | union semun fourth; | ||
103 | if (!ptr) | ||
104 | return -EINVAL; | ||
105 | if (get_user(fourth.__pad, (void __user * __user *) ptr)) | ||
106 | return -EFAULT; | ||
107 | return sys_semctl (first, second, third, fourth); | ||
108 | } | ||
109 | |||
110 | case MSGSND: | ||
111 | return sys_msgsnd (first, (struct msgbuf __user *) ptr, | ||
112 | second, third); | ||
113 | case MSGRCV: | ||
114 | switch (version) { | ||
115 | case 0: { | ||
116 | struct ipc_kludge tmp; | ||
117 | if (!ptr) | ||
118 | return -EINVAL; | ||
119 | |||
120 | if (copy_from_user(&tmp, | ||
121 | (struct ipc_kludge __user *) ptr, | ||
122 | sizeof (tmp))) | ||
123 | return -EFAULT; | ||
124 | return sys_msgrcv (first, tmp.msgp, second, | ||
125 | tmp.msgtyp, third); | ||
126 | } | ||
127 | default: | ||
128 | return sys_msgrcv (first, | ||
129 | (struct msgbuf __user *) ptr, | ||
130 | second, fifth, third); | ||
131 | } | ||
132 | case MSGGET: | ||
133 | return sys_msgget ((key_t) first, second); | ||
134 | case MSGCTL: | ||
135 | return sys_msgctl (first, second, | ||
136 | (struct msqid_ds __user *) ptr); | ||
137 | case SHMAT: { | ||
138 | ulong raddr; | ||
139 | |||
140 | if (!access_ok(VERIFY_WRITE, (ulong __user *) third, | ||
141 | sizeof(ulong))) | ||
142 | return -EFAULT; | ||
143 | ret = do_shmat (first, (char __user *) ptr, second, &raddr); | ||
144 | if (ret) | ||
145 | return ret; | ||
146 | return put_user (raddr, (ulong __user *) third); | ||
147 | } | ||
148 | case SHMDT: | ||
149 | return sys_shmdt ((char __user *)ptr); | ||
150 | case SHMGET: | ||
151 | return sys_shmget (first, second, third); | ||
152 | case SHMCTL: | ||
153 | return sys_shmctl (first, second, | ||
154 | (struct shmid_ds __user *) ptr); | ||
155 | default: | ||
156 | return -ENOSYS; | ||
157 | } | ||
158 | } | ||
159 | |||
160 | asmlinkage int sys_uname(struct old_utsname __user * name) | 79 | asmlinkage int sys_uname(struct old_utsname __user * name) |
161 | { | 80 | { |
162 | int err; | 81 | int err; |
diff --git a/arch/m68k/include/asm/unistd.h b/arch/m68k/include/asm/unistd.h index d801154310ea..60b15d0aa072 100644 --- a/arch/m68k/include/asm/unistd.h +++ b/arch/m68k/include/asm/unistd.h | |||
@@ -351,6 +351,7 @@ | |||
351 | #define __ARCH_WANT_STAT64 | 351 | #define __ARCH_WANT_STAT64 |
352 | #define __ARCH_WANT_SYS_ALARM | 352 | #define __ARCH_WANT_SYS_ALARM |
353 | #define __ARCH_WANT_SYS_GETHOSTNAME | 353 | #define __ARCH_WANT_SYS_GETHOSTNAME |
354 | #define __ARCH_WANT_SYS_IPC | ||
354 | #define __ARCH_WANT_SYS_PAUSE | 355 | #define __ARCH_WANT_SYS_PAUSE |
355 | #define __ARCH_WANT_SYS_SGETMASK | 356 | #define __ARCH_WANT_SYS_SGETMASK |
356 | #define __ARCH_WANT_SYS_SIGNAL | 357 | #define __ARCH_WANT_SYS_SIGNAL |
diff --git a/arch/m68k/kernel/sys_m68k.c b/arch/m68k/kernel/sys_m68k.c index 7b309e7b6cef..77896692eb0a 100644 --- a/arch/m68k/kernel/sys_m68k.c +++ b/arch/m68k/kernel/sys_m68k.c | |||
@@ -46,87 +46,6 @@ asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, | |||
46 | return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff); | 46 | return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff); |
47 | } | 47 | } |
48 | 48 | ||
49 | /* | ||
50 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
51 | * | ||
52 | * This is really horribly ugly. | ||
53 | */ | ||
54 | asmlinkage int sys_ipc (uint call, int first, int second, | ||
55 | int third, void __user *ptr, long fifth) | ||
56 | { | ||
57 | int version, ret; | ||
58 | |||
59 | version = call >> 16; /* hack for backward compatibility */ | ||
60 | call &= 0xffff; | ||
61 | |||
62 | if (call <= SEMCTL) | ||
63 | switch (call) { | ||
64 | case SEMOP: | ||
65 | return sys_semop (first, ptr, second); | ||
66 | case SEMGET: | ||
67 | return sys_semget (first, second, third); | ||
68 | case SEMCTL: { | ||
69 | union semun fourth; | ||
70 | if (!ptr) | ||
71 | return -EINVAL; | ||
72 | if (get_user(fourth.__pad, (void __user *__user *) ptr)) | ||
73 | return -EFAULT; | ||
74 | return sys_semctl (first, second, third, fourth); | ||
75 | } | ||
76 | default: | ||
77 | return -ENOSYS; | ||
78 | } | ||
79 | if (call <= MSGCTL) | ||
80 | switch (call) { | ||
81 | case MSGSND: | ||
82 | return sys_msgsnd (first, ptr, second, third); | ||
83 | case MSGRCV: | ||
84 | switch (version) { | ||
85 | case 0: { | ||
86 | struct ipc_kludge tmp; | ||
87 | if (!ptr) | ||
88 | return -EINVAL; | ||
89 | if (copy_from_user (&tmp, ptr, sizeof (tmp))) | ||
90 | return -EFAULT; | ||
91 | return sys_msgrcv (first, tmp.msgp, second, | ||
92 | tmp.msgtyp, third); | ||
93 | } | ||
94 | default: | ||
95 | return sys_msgrcv (first, ptr, | ||
96 | second, fifth, third); | ||
97 | } | ||
98 | case MSGGET: | ||
99 | return sys_msgget ((key_t) first, second); | ||
100 | case MSGCTL: | ||
101 | return sys_msgctl (first, second, ptr); | ||
102 | default: | ||
103 | return -ENOSYS; | ||
104 | } | ||
105 | if (call <= SHMCTL) | ||
106 | switch (call) { | ||
107 | case SHMAT: | ||
108 | switch (version) { | ||
109 | default: { | ||
110 | ulong raddr; | ||
111 | ret = do_shmat (first, ptr, second, &raddr); | ||
112 | if (ret) | ||
113 | return ret; | ||
114 | return put_user (raddr, (ulong __user *) third); | ||
115 | } | ||
116 | } | ||
117 | case SHMDT: | ||
118 | return sys_shmdt (ptr); | ||
119 | case SHMGET: | ||
120 | return sys_shmget (first, second, third); | ||
121 | case SHMCTL: | ||
122 | return sys_shmctl (first, second, ptr); | ||
123 | default: | ||
124 | return -ENOSYS; | ||
125 | } | ||
126 | |||
127 | return -EINVAL; | ||
128 | } | ||
129 | |||
130 | /* Convert virtual (user) address VADDR to physical address PADDR */ | 49 | /* Convert virtual (user) address VADDR to physical address PADDR */ |
131 | #define virt_to_phys_040(vaddr) \ | 50 | #define virt_to_phys_040(vaddr) \ |
132 | ({ \ | 51 | ({ \ |
diff --git a/arch/m68knommu/kernel/sys_m68k.c b/arch/m68knommu/kernel/sys_m68k.c index 3e371cc9fd91..d65e9c4c930c 100644 --- a/arch/m68knommu/kernel/sys_m68k.c +++ b/arch/m68knommu/kernel/sys_m68k.c | |||
@@ -27,92 +27,6 @@ | |||
27 | #include <asm/cacheflush.h> | 27 | #include <asm/cacheflush.h> |
28 | #include <asm/unistd.h> | 28 | #include <asm/unistd.h> |
29 | 29 | ||
30 | /* | ||
31 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
32 | * | ||
33 | * This is really horribly ugly. | ||
34 | */ | ||
35 | asmlinkage int sys_ipc (uint call, int first, int second, | ||
36 | int third, void *ptr, long fifth) | ||
37 | { | ||
38 | int version, ret; | ||
39 | |||
40 | version = call >> 16; /* hack for backward compatibility */ | ||
41 | call &= 0xffff; | ||
42 | |||
43 | if (call <= SEMCTL) | ||
44 | switch (call) { | ||
45 | case SEMOP: | ||
46 | return sys_semop (first, (struct sembuf *)ptr, second); | ||
47 | case SEMGET: | ||
48 | return sys_semget (first, second, third); | ||
49 | case SEMCTL: { | ||
50 | union semun fourth; | ||
51 | if (!ptr) | ||
52 | return -EINVAL; | ||
53 | if (get_user(fourth.__pad, (void **) ptr)) | ||
54 | return -EFAULT; | ||
55 | return sys_semctl (first, second, third, fourth); | ||
56 | } | ||
57 | default: | ||
58 | return -EINVAL; | ||
59 | } | ||
60 | if (call <= MSGCTL) | ||
61 | switch (call) { | ||
62 | case MSGSND: | ||
63 | return sys_msgsnd (first, (struct msgbuf *) ptr, | ||
64 | second, third); | ||
65 | case MSGRCV: | ||
66 | switch (version) { | ||
67 | case 0: { | ||
68 | struct ipc_kludge tmp; | ||
69 | if (!ptr) | ||
70 | return -EINVAL; | ||
71 | if (copy_from_user (&tmp, | ||
72 | (struct ipc_kludge *)ptr, | ||
73 | sizeof (tmp))) | ||
74 | return -EFAULT; | ||
75 | return sys_msgrcv (first, tmp.msgp, second, | ||
76 | tmp.msgtyp, third); | ||
77 | } | ||
78 | default: | ||
79 | return sys_msgrcv (first, | ||
80 | (struct msgbuf *) ptr, | ||
81 | second, fifth, third); | ||
82 | } | ||
83 | case MSGGET: | ||
84 | return sys_msgget ((key_t) first, second); | ||
85 | case MSGCTL: | ||
86 | return sys_msgctl (first, second, | ||
87 | (struct msqid_ds *) ptr); | ||
88 | default: | ||
89 | return -EINVAL; | ||
90 | } | ||
91 | if (call <= SHMCTL) | ||
92 | switch (call) { | ||
93 | case SHMAT: | ||
94 | switch (version) { | ||
95 | default: { | ||
96 | ulong raddr; | ||
97 | ret = do_shmat (first, ptr, second, &raddr); | ||
98 | if (ret) | ||
99 | return ret; | ||
100 | return put_user (raddr, (ulong __user *) third); | ||
101 | } | ||
102 | } | ||
103 | case SHMDT: | ||
104 | return sys_shmdt (ptr); | ||
105 | case SHMGET: | ||
106 | return sys_shmget (first, second, third); | ||
107 | case SHMCTL: | ||
108 | return sys_shmctl (first, second, ptr); | ||
109 | default: | ||
110 | return -ENOSYS; | ||
111 | } | ||
112 | |||
113 | return -EINVAL; | ||
114 | } | ||
115 | |||
116 | /* sys_cacheflush -- flush (part of) the processor cache. */ | 30 | /* sys_cacheflush -- flush (part of) the processor cache. */ |
117 | asmlinkage int | 31 | asmlinkage int |
118 | sys_cacheflush (unsigned long addr, int scope, int cache, unsigned long len) | 32 | sys_cacheflush (unsigned long addr, int scope, int cache, unsigned long len) |
diff --git a/arch/mips/include/asm/unistd.h b/arch/mips/include/asm/unistd.h index 65c679ecbe6b..97fe472095f2 100644 --- a/arch/mips/include/asm/unistd.h +++ b/arch/mips/include/asm/unistd.h | |||
@@ -1004,6 +1004,7 @@ | |||
1004 | #define __ARCH_WANT_OLD_READDIR | 1004 | #define __ARCH_WANT_OLD_READDIR |
1005 | #define __ARCH_WANT_SYS_ALARM | 1005 | #define __ARCH_WANT_SYS_ALARM |
1006 | #define __ARCH_WANT_SYS_GETHOSTNAME | 1006 | #define __ARCH_WANT_SYS_GETHOSTNAME |
1007 | #define __ARCH_WANT_SYS_IPC | ||
1007 | #define __ARCH_WANT_SYS_PAUSE | 1008 | #define __ARCH_WANT_SYS_PAUSE |
1008 | #define __ARCH_WANT_SYS_SGETMASK | 1009 | #define __ARCH_WANT_SYS_SGETMASK |
1009 | #define __ARCH_WANT_SYS_UTIME | 1010 | #define __ARCH_WANT_SYS_UTIME |
diff --git a/arch/mips/kernel/syscall.c b/arch/mips/kernel/syscall.c index 3f7f466190b4..257bf0141775 100644 --- a/arch/mips/kernel/syscall.c +++ b/arch/mips/kernel/syscall.c | |||
@@ -407,94 +407,6 @@ _sys_sysmips(nabi_no_regargs struct pt_regs regs) | |||
407 | } | 407 | } |
408 | 408 | ||
409 | /* | 409 | /* |
410 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
411 | * | ||
412 | * This is really horribly ugly. | ||
413 | */ | ||
414 | SYSCALL_DEFINE6(ipc, unsigned int, call, int, first, int, second, | ||
415 | unsigned long, third, void __user *, ptr, long, fifth) | ||
416 | { | ||
417 | int version, ret; | ||
418 | |||
419 | version = call >> 16; /* hack for backward compatibility */ | ||
420 | call &= 0xffff; | ||
421 | |||
422 | switch (call) { | ||
423 | case SEMOP: | ||
424 | return sys_semtimedop(first, (struct sembuf __user *)ptr, | ||
425 | second, NULL); | ||
426 | case SEMTIMEDOP: | ||
427 | return sys_semtimedop(first, (struct sembuf __user *)ptr, | ||
428 | second, | ||
429 | (const struct timespec __user *)fifth); | ||
430 | case SEMGET: | ||
431 | return sys_semget(first, second, third); | ||
432 | case SEMCTL: { | ||
433 | union semun fourth; | ||
434 | if (!ptr) | ||
435 | return -EINVAL; | ||
436 | if (get_user(fourth.__pad, (void __user *__user *) ptr)) | ||
437 | return -EFAULT; | ||
438 | return sys_semctl(first, second, third, fourth); | ||
439 | } | ||
440 | |||
441 | case MSGSND: | ||
442 | return sys_msgsnd(first, (struct msgbuf __user *) ptr, | ||
443 | second, third); | ||
444 | case MSGRCV: | ||
445 | switch (version) { | ||
446 | case 0: { | ||
447 | struct ipc_kludge tmp; | ||
448 | if (!ptr) | ||
449 | return -EINVAL; | ||
450 | |||
451 | if (copy_from_user(&tmp, | ||
452 | (struct ipc_kludge __user *) ptr, | ||
453 | sizeof(tmp))) | ||
454 | return -EFAULT; | ||
455 | return sys_msgrcv(first, tmp.msgp, second, | ||
456 | tmp.msgtyp, third); | ||
457 | } | ||
458 | default: | ||
459 | return sys_msgrcv(first, | ||
460 | (struct msgbuf __user *) ptr, | ||
461 | second, fifth, third); | ||
462 | } | ||
463 | case MSGGET: | ||
464 | return sys_msgget((key_t) first, second); | ||
465 | case MSGCTL: | ||
466 | return sys_msgctl(first, second, | ||
467 | (struct msqid_ds __user *) ptr); | ||
468 | |||
469 | case SHMAT: | ||
470 | switch (version) { | ||
471 | default: { | ||
472 | unsigned long raddr; | ||
473 | ret = do_shmat(first, (char __user *) ptr, second, | ||
474 | &raddr); | ||
475 | if (ret) | ||
476 | return ret; | ||
477 | return put_user(raddr, (unsigned long __user *) third); | ||
478 | } | ||
479 | case 1: /* iBCS2 emulator entry point */ | ||
480 | if (!segment_eq(get_fs(), get_ds())) | ||
481 | return -EINVAL; | ||
482 | return do_shmat(first, (char __user *) ptr, second, | ||
483 | (unsigned long *) third); | ||
484 | } | ||
485 | case SHMDT: | ||
486 | return sys_shmdt((char __user *)ptr); | ||
487 | case SHMGET: | ||
488 | return sys_shmget(first, second, third); | ||
489 | case SHMCTL: | ||
490 | return sys_shmctl(first, second, | ||
491 | (struct shmid_ds __user *) ptr); | ||
492 | default: | ||
493 | return -ENOSYS; | ||
494 | } | ||
495 | } | ||
496 | |||
497 | /* | ||
498 | * No implemented yet ... | 410 | * No implemented yet ... |
499 | */ | 411 | */ |
500 | SYSCALL_DEFINE3(cachectl, char *, addr, int, nbytes, int, op) | 412 | SYSCALL_DEFINE3(cachectl, char *, addr, int, nbytes, int, op) |
diff --git a/arch/mn10300/include/asm/unistd.h b/arch/mn10300/include/asm/unistd.h index d13a56e99bad..9d056f515929 100644 --- a/arch/mn10300/include/asm/unistd.h +++ b/arch/mn10300/include/asm/unistd.h | |||
@@ -363,6 +363,7 @@ | |||
363 | #define __ARCH_WANT_STAT64 | 363 | #define __ARCH_WANT_STAT64 |
364 | #define __ARCH_WANT_SYS_ALARM | 364 | #define __ARCH_WANT_SYS_ALARM |
365 | #define __ARCH_WANT_SYS_GETHOSTNAME | 365 | #define __ARCH_WANT_SYS_GETHOSTNAME |
366 | #define __ARCH_WANT_SYS_IPC | ||
366 | #define __ARCH_WANT_SYS_PAUSE | 367 | #define __ARCH_WANT_SYS_PAUSE |
367 | #define __ARCH_WANT_SYS_SGETMASK | 368 | #define __ARCH_WANT_SYS_SGETMASK |
368 | #define __ARCH_WANT_SYS_SIGNAL | 369 | #define __ARCH_WANT_SYS_SIGNAL |
diff --git a/arch/mn10300/kernel/sys_mn10300.c b/arch/mn10300/kernel/sys_mn10300.c index bef69d6daf15..815f1355fad4 100644 --- a/arch/mn10300/kernel/sys_mn10300.c +++ b/arch/mn10300/kernel/sys_mn10300.c | |||
@@ -31,91 +31,3 @@ asmlinkage long old_mmap(unsigned long addr, unsigned long len, | |||
31 | return -EINVAL; | 31 | return -EINVAL; |
32 | return sys_mmap_pgoff(addr, len, prot, flags, fd, offset >> PAGE_SHIFT); | 32 | return sys_mmap_pgoff(addr, len, prot, flags, fd, offset >> PAGE_SHIFT); |
33 | } | 33 | } |
34 | |||
35 | /* | ||
36 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
37 | * | ||
38 | * This is really horribly ugly. | ||
39 | */ | ||
40 | asmlinkage long sys_ipc(uint call, int first, int second, | ||
41 | int third, void __user *ptr, long fifth) | ||
42 | { | ||
43 | int version, ret; | ||
44 | |||
45 | version = call >> 16; /* hack for backward compatibility */ | ||
46 | call &= 0xffff; | ||
47 | |||
48 | switch (call) { | ||
49 | case SEMOP: | ||
50 | return sys_semtimedop(first, (struct sembuf __user *)ptr, | ||
51 | second, NULL); | ||
52 | case SEMTIMEDOP: | ||
53 | return sys_semtimedop(first, (struct sembuf __user *)ptr, | ||
54 | second, | ||
55 | (const struct timespec __user *)fifth); | ||
56 | case SEMGET: | ||
57 | return sys_semget(first, second, third); | ||
58 | case SEMCTL: { | ||
59 | union semun fourth; | ||
60 | if (!ptr) | ||
61 | return -EINVAL; | ||
62 | if (get_user(fourth.__pad, (void __user * __user *) ptr)) | ||
63 | return -EFAULT; | ||
64 | return sys_semctl(first, second, third, fourth); | ||
65 | } | ||
66 | |||
67 | case MSGSND: | ||
68 | return sys_msgsnd(first, (struct msgbuf __user *) ptr, | ||
69 | second, third); | ||
70 | case MSGRCV: | ||
71 | switch (version) { | ||
72 | case 0: { | ||
73 | struct ipc_kludge tmp; | ||
74 | if (!ptr) | ||
75 | return -EINVAL; | ||
76 | |||
77 | if (copy_from_user(&tmp, | ||
78 | (struct ipc_kludge __user *) ptr, | ||
79 | sizeof(tmp))) | ||
80 | return -EFAULT; | ||
81 | return sys_msgrcv(first, tmp.msgp, second, | ||
82 | tmp.msgtyp, third); | ||
83 | } | ||
84 | default: | ||
85 | return sys_msgrcv(first, | ||
86 | (struct msgbuf __user *) ptr, | ||
87 | second, fifth, third); | ||
88 | } | ||
89 | case MSGGET: | ||
90 | return sys_msgget((key_t) first, second); | ||
91 | case MSGCTL: | ||
92 | return sys_msgctl(first, second, | ||
93 | (struct msqid_ds __user *) ptr); | ||
94 | |||
95 | case SHMAT: | ||
96 | switch (version) { | ||
97 | default: { | ||
98 | ulong raddr; | ||
99 | ret = do_shmat(first, (char __user *) ptr, second, | ||
100 | &raddr); | ||
101 | if (ret) | ||
102 | return ret; | ||
103 | return put_user(raddr, (ulong *) third); | ||
104 | } | ||
105 | case 1: /* iBCS2 emulator entry point */ | ||
106 | if (!segment_eq(get_fs(), get_ds())) | ||
107 | return -EINVAL; | ||
108 | return do_shmat(first, (char __user *) ptr, second, | ||
109 | (ulong *) third); | ||
110 | } | ||
111 | case SHMDT: | ||
112 | return sys_shmdt((char __user *)ptr); | ||
113 | case SHMGET: | ||
114 | return sys_shmget(first, second, third); | ||
115 | case SHMCTL: | ||
116 | return sys_shmctl(first, second, | ||
117 | (struct shmid_ds __user *) ptr); | ||
118 | default: | ||
119 | return -EINVAL; | ||
120 | } | ||
121 | } | ||
diff --git a/arch/powerpc/include/asm/syscalls.h b/arch/powerpc/include/asm/syscalls.h index eb8eb400c664..23bb74e7f946 100644 --- a/arch/powerpc/include/asm/syscalls.h +++ b/arch/powerpc/include/asm/syscalls.h | |||
@@ -35,8 +35,6 @@ asmlinkage long sys_pipe2(int __user *fildes, int flags); | |||
35 | asmlinkage long sys_rt_sigaction(int sig, | 35 | asmlinkage long sys_rt_sigaction(int sig, |
36 | const struct sigaction __user *act, | 36 | const struct sigaction __user *act, |
37 | struct sigaction __user *oact, size_t sigsetsize); | 37 | struct sigaction __user *oact, size_t sigsetsize); |
38 | asmlinkage int sys_ipc(uint call, int first, unsigned long second, | ||
39 | long third, void __user *ptr, long fifth); | ||
40 | asmlinkage long ppc64_personality(unsigned long personality); | 38 | asmlinkage long ppc64_personality(unsigned long personality); |
41 | asmlinkage int ppc_rtas(struct rtas_args __user *uargs); | 39 | asmlinkage int ppc_rtas(struct rtas_args __user *uargs); |
42 | asmlinkage time_t sys64_time(time_t __user * tloc); | 40 | asmlinkage time_t sys64_time(time_t __user * tloc); |
diff --git a/arch/powerpc/include/asm/unistd.h b/arch/powerpc/include/asm/unistd.h index f6ca76176766..c13821fe8741 100644 --- a/arch/powerpc/include/asm/unistd.h +++ b/arch/powerpc/include/asm/unistd.h | |||
@@ -364,6 +364,7 @@ | |||
364 | #define __ARCH_WANT_STAT64 | 364 | #define __ARCH_WANT_STAT64 |
365 | #define __ARCH_WANT_SYS_ALARM | 365 | #define __ARCH_WANT_SYS_ALARM |
366 | #define __ARCH_WANT_SYS_GETHOSTNAME | 366 | #define __ARCH_WANT_SYS_GETHOSTNAME |
367 | #define __ARCH_WANT_SYS_IPC | ||
367 | #define __ARCH_WANT_SYS_PAUSE | 368 | #define __ARCH_WANT_SYS_PAUSE |
368 | #define __ARCH_WANT_SYS_SGETMASK | 369 | #define __ARCH_WANT_SYS_SGETMASK |
369 | #define __ARCH_WANT_SYS_SIGNAL | 370 | #define __ARCH_WANT_SYS_SIGNAL |
diff --git a/arch/powerpc/kernel/syscalls.c b/arch/powerpc/kernel/syscalls.c index 3370e62e43d4..5251221e7a5a 100644 --- a/arch/powerpc/kernel/syscalls.c +++ b/arch/powerpc/kernel/syscalls.c | |||
@@ -42,100 +42,6 @@ | |||
42 | #include <asm/time.h> | 42 | #include <asm/time.h> |
43 | #include <asm/unistd.h> | 43 | #include <asm/unistd.h> |
44 | 44 | ||
45 | /* | ||
46 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
47 | * | ||
48 | * This is really horribly ugly. | ||
49 | */ | ||
50 | int sys_ipc(uint call, int first, unsigned long second, long third, | ||
51 | void __user *ptr, long fifth) | ||
52 | { | ||
53 | int version, ret; | ||
54 | |||
55 | version = call >> 16; /* hack for backward compatibility */ | ||
56 | call &= 0xffff; | ||
57 | |||
58 | ret = -ENOSYS; | ||
59 | switch (call) { | ||
60 | case SEMOP: | ||
61 | ret = sys_semtimedop(first, (struct sembuf __user *)ptr, | ||
62 | (unsigned)second, NULL); | ||
63 | break; | ||
64 | case SEMTIMEDOP: | ||
65 | ret = sys_semtimedop(first, (struct sembuf __user *)ptr, | ||
66 | (unsigned)second, | ||
67 | (const struct timespec __user *) fifth); | ||
68 | break; | ||
69 | case SEMGET: | ||
70 | ret = sys_semget (first, (int)second, third); | ||
71 | break; | ||
72 | case SEMCTL: { | ||
73 | union semun fourth; | ||
74 | |||
75 | ret = -EINVAL; | ||
76 | if (!ptr) | ||
77 | break; | ||
78 | if ((ret = get_user(fourth.__pad, (void __user * __user *)ptr))) | ||
79 | break; | ||
80 | ret = sys_semctl(first, (int)second, third, fourth); | ||
81 | break; | ||
82 | } | ||
83 | case MSGSND: | ||
84 | ret = sys_msgsnd(first, (struct msgbuf __user *)ptr, | ||
85 | (size_t)second, third); | ||
86 | break; | ||
87 | case MSGRCV: | ||
88 | switch (version) { | ||
89 | case 0: { | ||
90 | struct ipc_kludge tmp; | ||
91 | |||
92 | ret = -EINVAL; | ||
93 | if (!ptr) | ||
94 | break; | ||
95 | if ((ret = copy_from_user(&tmp, | ||
96 | (struct ipc_kludge __user *) ptr, | ||
97 | sizeof (tmp)) ? -EFAULT : 0)) | ||
98 | break; | ||
99 | ret = sys_msgrcv(first, tmp.msgp, (size_t) second, | ||
100 | tmp.msgtyp, third); | ||
101 | break; | ||
102 | } | ||
103 | default: | ||
104 | ret = sys_msgrcv (first, (struct msgbuf __user *) ptr, | ||
105 | (size_t)second, fifth, third); | ||
106 | break; | ||
107 | } | ||
108 | break; | ||
109 | case MSGGET: | ||
110 | ret = sys_msgget((key_t)first, (int)second); | ||
111 | break; | ||
112 | case MSGCTL: | ||
113 | ret = sys_msgctl(first, (int)second, | ||
114 | (struct msqid_ds __user *)ptr); | ||
115 | break; | ||
116 | case SHMAT: { | ||
117 | ulong raddr; | ||
118 | ret = do_shmat(first, (char __user *)ptr, (int)second, &raddr); | ||
119 | if (ret) | ||
120 | break; | ||
121 | ret = put_user(raddr, (ulong __user *) third); | ||
122 | break; | ||
123 | } | ||
124 | case SHMDT: | ||
125 | ret = sys_shmdt((char __user *)ptr); | ||
126 | break; | ||
127 | case SHMGET: | ||
128 | ret = sys_shmget(first, (size_t)second, third); | ||
129 | break; | ||
130 | case SHMCTL: | ||
131 | ret = sys_shmctl(first, (int)second, | ||
132 | (struct shmid_ds __user *)ptr); | ||
133 | break; | ||
134 | } | ||
135 | |||
136 | return ret; | ||
137 | } | ||
138 | |||
139 | static inline unsigned long do_mmap2(unsigned long addr, size_t len, | 45 | static inline unsigned long do_mmap2(unsigned long addr, size_t len, |
140 | unsigned long prot, unsigned long flags, | 46 | unsigned long prot, unsigned long flags, |
141 | unsigned long fd, unsigned long off, int shift) | 47 | unsigned long fd, unsigned long off, int shift) |
diff --git a/arch/s390/kernel/entry.h b/arch/s390/kernel/entry.h index 5de54d2af0b2..15fd68b196c0 100644 --- a/arch/s390/kernel/entry.h +++ b/arch/s390/kernel/entry.h | |||
@@ -30,7 +30,7 @@ struct fadvise64_64_args; | |||
30 | struct old_sigaction; | 30 | struct old_sigaction; |
31 | 31 | ||
32 | long sys_mmap2(struct s390_mmap_arg_struct __user *arg); | 32 | long sys_mmap2(struct s390_mmap_arg_struct __user *arg); |
33 | long sys_ipc(uint call, int first, unsigned long second, | 33 | long sys_s390_ipc(uint call, int first, unsigned long second, |
34 | unsigned long third, void __user *ptr); | 34 | unsigned long third, void __user *ptr); |
35 | long sys_s390_newuname(struct new_utsname __user *name); | 35 | long sys_s390_newuname(struct new_utsname __user *name); |
36 | long sys_s390_personality(unsigned long personality); | 36 | long sys_s390_personality(unsigned long personality); |
diff --git a/arch/s390/kernel/sys_s390.c b/arch/s390/kernel/sys_s390.c index b2563509b5a9..b8b78092ab7c 100644 --- a/arch/s390/kernel/sys_s390.c +++ b/arch/s390/kernel/sys_s390.c | |||
@@ -64,7 +64,7 @@ out: | |||
64 | * | 64 | * |
65 | * This is really horribly ugly. | 65 | * This is really horribly ugly. |
66 | */ | 66 | */ |
67 | SYSCALL_DEFINE5(ipc, uint, call, int, first, unsigned long, second, | 67 | SYSCALL_DEFINE5(s390_ipc, uint, call, int, first, unsigned long, second, |
68 | unsigned long, third, void __user *, ptr) | 68 | unsigned long, third, void __user *, ptr) |
69 | { | 69 | { |
70 | struct ipc_kludge tmp; | 70 | struct ipc_kludge tmp; |
diff --git a/arch/s390/kernel/syscalls.S b/arch/s390/kernel/syscalls.S index 2a24766567af..990ac8b321c8 100644 --- a/arch/s390/kernel/syscalls.S +++ b/arch/s390/kernel/syscalls.S | |||
@@ -125,7 +125,7 @@ NI_SYSCALL /* vm86old for i386 */ | |||
125 | SYSCALL(sys_wait4,sys_wait4,compat_sys_wait4_wrapper) | 125 | SYSCALL(sys_wait4,sys_wait4,compat_sys_wait4_wrapper) |
126 | SYSCALL(sys_swapoff,sys_swapoff,sys32_swapoff_wrapper) /* 115 */ | 126 | SYSCALL(sys_swapoff,sys_swapoff,sys32_swapoff_wrapper) /* 115 */ |
127 | SYSCALL(sys_sysinfo,sys_sysinfo,compat_sys_sysinfo_wrapper) | 127 | SYSCALL(sys_sysinfo,sys_sysinfo,compat_sys_sysinfo_wrapper) |
128 | SYSCALL(sys_ipc,sys_ipc,sys32_ipc_wrapper) | 128 | SYSCALL(sys_s390_ipc,sys_s390_ipc,sys32_ipc_wrapper) |
129 | SYSCALL(sys_fsync,sys_fsync,sys32_fsync_wrapper) | 129 | SYSCALL(sys_fsync,sys_fsync,sys32_fsync_wrapper) |
130 | SYSCALL(sys_sigreturn,sys_sigreturn,sys32_sigreturn) | 130 | SYSCALL(sys_sigreturn,sys_sigreturn,sys32_sigreturn) |
131 | SYSCALL(sys_clone,sys_clone,sys_clone_wrapper) /* 120 */ | 131 | SYSCALL(sys_clone,sys_clone,sys_clone_wrapper) /* 120 */ |
diff --git a/arch/sh/include/asm/syscalls.h b/arch/sh/include/asm/syscalls.h index c1e2b8deb837..c1ce2862f7be 100644 --- a/arch/sh/include/asm/syscalls.h +++ b/arch/sh/include/asm/syscalls.h | |||
@@ -11,8 +11,6 @@ asmlinkage int old_mmap(unsigned long addr, unsigned long len, | |||
11 | asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, | 11 | asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, |
12 | unsigned long prot, unsigned long flags, | 12 | unsigned long prot, unsigned long flags, |
13 | unsigned long fd, unsigned long pgoff); | 13 | unsigned long fd, unsigned long pgoff); |
14 | asmlinkage int sys_ipc(uint call, int first, int second, | ||
15 | int third, void __user *ptr, long fifth); | ||
16 | asmlinkage int sys_uname(struct old_utsname __user *name); | 14 | asmlinkage int sys_uname(struct old_utsname __user *name); |
17 | 15 | ||
18 | #ifdef CONFIG_SUPERH32 | 16 | #ifdef CONFIG_SUPERH32 |
diff --git a/arch/sh/include/asm/unistd_32.h b/arch/sh/include/asm/unistd_32.h index 365744b05269..a48f65e2e429 100644 --- a/arch/sh/include/asm/unistd_32.h +++ b/arch/sh/include/asm/unistd_32.h | |||
@@ -358,6 +358,7 @@ | |||
358 | #define __ARCH_WANT_STAT64 | 358 | #define __ARCH_WANT_STAT64 |
359 | #define __ARCH_WANT_SYS_ALARM | 359 | #define __ARCH_WANT_SYS_ALARM |
360 | #define __ARCH_WANT_SYS_GETHOSTNAME | 360 | #define __ARCH_WANT_SYS_GETHOSTNAME |
361 | #define __ARCH_WANT_SYS_IPC | ||
361 | #define __ARCH_WANT_SYS_PAUSE | 362 | #define __ARCH_WANT_SYS_PAUSE |
362 | #define __ARCH_WANT_SYS_SGETMASK | 363 | #define __ARCH_WANT_SYS_SGETMASK |
363 | #define __ARCH_WANT_SYS_SIGNAL | 364 | #define __ARCH_WANT_SYS_SIGNAL |
diff --git a/arch/sh/include/asm/unistd_64.h b/arch/sh/include/asm/unistd_64.h index 25de158aac3a..7709b2b8f752 100644 --- a/arch/sh/include/asm/unistd_64.h +++ b/arch/sh/include/asm/unistd_64.h | |||
@@ -398,6 +398,7 @@ | |||
398 | #define __ARCH_WANT_STAT64 | 398 | #define __ARCH_WANT_STAT64 |
399 | #define __ARCH_WANT_SYS_ALARM | 399 | #define __ARCH_WANT_SYS_ALARM |
400 | #define __ARCH_WANT_SYS_GETHOSTNAME | 400 | #define __ARCH_WANT_SYS_GETHOSTNAME |
401 | #define __ARCH_WANT_SYS_IPC | ||
401 | #define __ARCH_WANT_SYS_PAUSE | 402 | #define __ARCH_WANT_SYS_PAUSE |
402 | #define __ARCH_WANT_SYS_SGETMASK | 403 | #define __ARCH_WANT_SYS_SGETMASK |
403 | #define __ARCH_WANT_SYS_SIGNAL | 404 | #define __ARCH_WANT_SYS_SIGNAL |
diff --git a/arch/sh/kernel/sys_sh.c b/arch/sh/kernel/sys_sh.c index 71399cde03b5..c18cfaa67fdd 100644 --- a/arch/sh/kernel/sys_sh.c +++ b/arch/sh/kernel/sys_sh.c | |||
@@ -53,110 +53,6 @@ asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, | |||
53 | return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff); | 53 | return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff); |
54 | } | 54 | } |
55 | 55 | ||
56 | /* | ||
57 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
58 | * | ||
59 | * This is really horribly ugly. | ||
60 | */ | ||
61 | asmlinkage int sys_ipc(uint call, int first, int second, | ||
62 | int third, void __user *ptr, long fifth) | ||
63 | { | ||
64 | int version, ret; | ||
65 | |||
66 | version = call >> 16; /* hack for backward compatibility */ | ||
67 | call &= 0xffff; | ||
68 | |||
69 | if (call <= SEMTIMEDOP) | ||
70 | switch (call) { | ||
71 | case SEMOP: | ||
72 | return sys_semtimedop(first, | ||
73 | (struct sembuf __user *)ptr, | ||
74 | second, NULL); | ||
75 | case SEMTIMEDOP: | ||
76 | return sys_semtimedop(first, | ||
77 | (struct sembuf __user *)ptr, second, | ||
78 | (const struct timespec __user *)fifth); | ||
79 | case SEMGET: | ||
80 | return sys_semget (first, second, third); | ||
81 | case SEMCTL: { | ||
82 | union semun fourth; | ||
83 | if (!ptr) | ||
84 | return -EINVAL; | ||
85 | if (get_user(fourth.__pad, (void __user * __user *) ptr)) | ||
86 | return -EFAULT; | ||
87 | return sys_semctl (first, second, third, fourth); | ||
88 | } | ||
89 | default: | ||
90 | return -EINVAL; | ||
91 | } | ||
92 | |||
93 | if (call <= MSGCTL) | ||
94 | switch (call) { | ||
95 | case MSGSND: | ||
96 | return sys_msgsnd (first, (struct msgbuf __user *) ptr, | ||
97 | second, third); | ||
98 | case MSGRCV: | ||
99 | switch (version) { | ||
100 | case 0: | ||
101 | { | ||
102 | struct ipc_kludge tmp; | ||
103 | |||
104 | if (!ptr) | ||
105 | return -EINVAL; | ||
106 | |||
107 | if (copy_from_user(&tmp, | ||
108 | (struct ipc_kludge __user *) ptr, | ||
109 | sizeof (tmp))) | ||
110 | return -EFAULT; | ||
111 | |||
112 | return sys_msgrcv (first, tmp.msgp, second, | ||
113 | tmp.msgtyp, third); | ||
114 | } | ||
115 | default: | ||
116 | return sys_msgrcv (first, | ||
117 | (struct msgbuf __user *) ptr, | ||
118 | second, fifth, third); | ||
119 | } | ||
120 | case MSGGET: | ||
121 | return sys_msgget ((key_t) first, second); | ||
122 | case MSGCTL: | ||
123 | return sys_msgctl (first, second, | ||
124 | (struct msqid_ds __user *) ptr); | ||
125 | default: | ||
126 | return -EINVAL; | ||
127 | } | ||
128 | if (call <= SHMCTL) | ||
129 | switch (call) { | ||
130 | case SHMAT: | ||
131 | switch (version) { | ||
132 | default: { | ||
133 | ulong raddr; | ||
134 | ret = do_shmat (first, (char __user *) ptr, | ||
135 | second, &raddr); | ||
136 | if (ret) | ||
137 | return ret; | ||
138 | return put_user (raddr, (ulong __user *) third); | ||
139 | } | ||
140 | case 1: /* iBCS2 emulator entry point */ | ||
141 | if (!segment_eq(get_fs(), get_ds())) | ||
142 | return -EINVAL; | ||
143 | return do_shmat (first, (char __user *) ptr, | ||
144 | second, (ulong *) third); | ||
145 | } | ||
146 | case SHMDT: | ||
147 | return sys_shmdt ((char __user *)ptr); | ||
148 | case SHMGET: | ||
149 | return sys_shmget (first, second, third); | ||
150 | case SHMCTL: | ||
151 | return sys_shmctl (first, second, | ||
152 | (struct shmid_ds __user *) ptr); | ||
153 | default: | ||
154 | return -EINVAL; | ||
155 | } | ||
156 | |||
157 | return -EINVAL; | ||
158 | } | ||
159 | |||
160 | /* sys_cacheflush -- flush (part of) the processor cache. */ | 56 | /* sys_cacheflush -- flush (part of) the processor cache. */ |
161 | asmlinkage int sys_cacheflush(unsigned long addr, unsigned long len, int op) | 57 | asmlinkage int sys_cacheflush(unsigned long addr, unsigned long len, int op) |
162 | { | 58 | { |
diff --git a/arch/sparc/include/asm/unistd.h b/arch/sparc/include/asm/unistd.h index cb4b9bfd0d87..d0b3b01ac9d4 100644 --- a/arch/sparc/include/asm/unistd.h +++ b/arch/sparc/include/asm/unistd.h | |||
@@ -432,7 +432,9 @@ | |||
432 | #define __ARCH_WANT_SYS_SIGPENDING | 432 | #define __ARCH_WANT_SYS_SIGPENDING |
433 | #define __ARCH_WANT_SYS_SIGPROCMASK | 433 | #define __ARCH_WANT_SYS_SIGPROCMASK |
434 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND | 434 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND |
435 | #ifndef __32bit_syscall_numbers__ | 435 | #ifdef __32bit_syscall_numbers__ |
436 | #define __ARCH_WANT_SYS_IPC | ||
437 | #else | ||
436 | #define __ARCH_WANT_COMPAT_SYS_TIME | 438 | #define __ARCH_WANT_COMPAT_SYS_TIME |
437 | #define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND | 439 | #define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND |
438 | #endif | 440 | #endif |
diff --git a/arch/sparc/kernel/sys_sparc_32.c b/arch/sparc/kernel/sys_sparc_32.c index 3a82e65d8db2..ee995b7dae7e 100644 --- a/arch/sparc/kernel/sys_sparc_32.c +++ b/arch/sparc/kernel/sys_sparc_32.c | |||
@@ -98,119 +98,6 @@ out: | |||
98 | return error; | 98 | return error; |
99 | } | 99 | } |
100 | 100 | ||
101 | /* | ||
102 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
103 | * | ||
104 | * This is really horribly ugly. | ||
105 | */ | ||
106 | |||
107 | asmlinkage int sys_ipc (uint call, int first, int second, int third, void __user *ptr, long fifth) | ||
108 | { | ||
109 | int version, err; | ||
110 | |||
111 | version = call >> 16; /* hack for backward compatibility */ | ||
112 | call &= 0xffff; | ||
113 | |||
114 | if (call <= SEMCTL) | ||
115 | switch (call) { | ||
116 | case SEMOP: | ||
117 | err = sys_semtimedop (first, (struct sembuf __user *)ptr, second, NULL); | ||
118 | goto out; | ||
119 | case SEMTIMEDOP: | ||
120 | err = sys_semtimedop (first, (struct sembuf __user *)ptr, second, (const struct timespec __user *) fifth); | ||
121 | goto out; | ||
122 | case SEMGET: | ||
123 | err = sys_semget (first, second, third); | ||
124 | goto out; | ||
125 | case SEMCTL: { | ||
126 | union semun fourth; | ||
127 | err = -EINVAL; | ||
128 | if (!ptr) | ||
129 | goto out; | ||
130 | err = -EFAULT; | ||
131 | if (get_user(fourth.__pad, | ||
132 | (void __user * __user *)ptr)) | ||
133 | goto out; | ||
134 | err = sys_semctl (first, second, third, fourth); | ||
135 | goto out; | ||
136 | } | ||
137 | default: | ||
138 | err = -ENOSYS; | ||
139 | goto out; | ||
140 | } | ||
141 | if (call <= MSGCTL) | ||
142 | switch (call) { | ||
143 | case MSGSND: | ||
144 | err = sys_msgsnd (first, (struct msgbuf __user *) ptr, | ||
145 | second, third); | ||
146 | goto out; | ||
147 | case MSGRCV: | ||
148 | switch (version) { | ||
149 | case 0: { | ||
150 | struct ipc_kludge tmp; | ||
151 | err = -EINVAL; | ||
152 | if (!ptr) | ||
153 | goto out; | ||
154 | err = -EFAULT; | ||
155 | if (copy_from_user(&tmp, (struct ipc_kludge __user *) ptr, sizeof (tmp))) | ||
156 | goto out; | ||
157 | err = sys_msgrcv (first, tmp.msgp, second, tmp.msgtyp, third); | ||
158 | goto out; | ||
159 | } | ||
160 | case 1: default: | ||
161 | err = sys_msgrcv (first, | ||
162 | (struct msgbuf __user *) ptr, | ||
163 | second, fifth, third); | ||
164 | goto out; | ||
165 | } | ||
166 | case MSGGET: | ||
167 | err = sys_msgget ((key_t) first, second); | ||
168 | goto out; | ||
169 | case MSGCTL: | ||
170 | err = sys_msgctl (first, second, (struct msqid_ds __user *) ptr); | ||
171 | goto out; | ||
172 | default: | ||
173 | err = -ENOSYS; | ||
174 | goto out; | ||
175 | } | ||
176 | if (call <= SHMCTL) | ||
177 | switch (call) { | ||
178 | case SHMAT: | ||
179 | switch (version) { | ||
180 | case 0: default: { | ||
181 | ulong raddr; | ||
182 | err = do_shmat (first, (char __user *) ptr, second, &raddr); | ||
183 | if (err) | ||
184 | goto out; | ||
185 | err = -EFAULT; | ||
186 | if (put_user (raddr, (ulong __user *) third)) | ||
187 | goto out; | ||
188 | err = 0; | ||
189 | goto out; | ||
190 | } | ||
191 | case 1: /* iBCS2 emulator entry point */ | ||
192 | err = -EINVAL; | ||
193 | goto out; | ||
194 | } | ||
195 | case SHMDT: | ||
196 | err = sys_shmdt ((char __user *)ptr); | ||
197 | goto out; | ||
198 | case SHMGET: | ||
199 | err = sys_shmget (first, second, third); | ||
200 | goto out; | ||
201 | case SHMCTL: | ||
202 | err = sys_shmctl (first, second, (struct shmid_ds __user *) ptr); | ||
203 | goto out; | ||
204 | default: | ||
205 | err = -ENOSYS; | ||
206 | goto out; | ||
207 | } | ||
208 | else | ||
209 | err = -ENOSYS; | ||
210 | out: | ||
211 | return err; | ||
212 | } | ||
213 | |||
214 | int sparc_mmap_check(unsigned long addr, unsigned long len) | 101 | int sparc_mmap_check(unsigned long addr, unsigned long len) |
215 | { | 102 | { |
216 | if (ARCH_SUN4C && | 103 | if (ARCH_SUN4C && |
diff --git a/arch/sparc/kernel/sys_sparc_64.c b/arch/sparc/kernel/sys_sparc_64.c index cb1bef6f14b7..45410e939628 100644 --- a/arch/sparc/kernel/sys_sparc_64.c +++ b/arch/sparc/kernel/sys_sparc_64.c | |||
@@ -426,7 +426,7 @@ out: | |||
426 | * This is really horribly ugly. | 426 | * This is really horribly ugly. |
427 | */ | 427 | */ |
428 | 428 | ||
429 | SYSCALL_DEFINE6(ipc, unsigned int, call, int, first, unsigned long, second, | 429 | SYSCALL_DEFINE6(sparc_ipc, unsigned int, call, int, first, unsigned long, second, |
430 | unsigned long, third, void __user *, ptr, long, fifth) | 430 | unsigned long, third, void __user *, ptr, long, fifth) |
431 | { | 431 | { |
432 | long err; | 432 | long err; |
diff --git a/arch/sparc/kernel/systbls.h b/arch/sparc/kernel/systbls.h index 68312fe8da74..2c331c37e748 100644 --- a/arch/sparc/kernel/systbls.h +++ b/arch/sparc/kernel/systbls.h | |||
@@ -10,7 +10,7 @@ struct new_utsname; | |||
10 | 10 | ||
11 | extern asmlinkage unsigned long sys_getpagesize(void); | 11 | extern asmlinkage unsigned long sys_getpagesize(void); |
12 | extern asmlinkage long sparc_pipe(struct pt_regs *regs); | 12 | extern asmlinkage long sparc_pipe(struct pt_regs *regs); |
13 | extern asmlinkage long sys_ipc(unsigned int call, int first, | 13 | extern asmlinkage long sys_sparc_ipc(unsigned int call, int first, |
14 | unsigned long second, | 14 | unsigned long second, |
15 | unsigned long third, | 15 | unsigned long third, |
16 | void __user *ptr, long fifth); | 16 | void __user *ptr, long fifth); |
diff --git a/arch/sparc/kernel/systbls_64.S b/arch/sparc/kernel/systbls_64.S index 17614251fb6d..30ca2b1d3a17 100644 --- a/arch/sparc/kernel/systbls_64.S +++ b/arch/sparc/kernel/systbls_64.S | |||
@@ -136,7 +136,7 @@ sys_call_table: | |||
136 | /*200*/ .word sys_ssetmask, sys_nis_syscall, sys_newlstat, sys_uselib, sys_nis_syscall | 136 | /*200*/ .word sys_ssetmask, sys_nis_syscall, sys_newlstat, sys_uselib, sys_nis_syscall |
137 | .word sys_readahead, sys_socketcall, sys_syslog, sys_lookup_dcookie, sys_fadvise64 | 137 | .word sys_readahead, sys_socketcall, sys_syslog, sys_lookup_dcookie, sys_fadvise64 |
138 | /*210*/ .word sys_fadvise64_64, sys_tgkill, sys_waitpid, sys_swapoff, sys_sysinfo | 138 | /*210*/ .word sys_fadvise64_64, sys_tgkill, sys_waitpid, sys_swapoff, sys_sysinfo |
139 | .word sys_ipc, sys_nis_syscall, sys_clone, sys_ioprio_get, sys_adjtimex | 139 | .word sys_sparc_ipc, sys_nis_syscall, sys_clone, sys_ioprio_get, sys_adjtimex |
140 | /*220*/ .word sys_nis_syscall, sys_ni_syscall, sys_delete_module, sys_ni_syscall, sys_getpgid | 140 | /*220*/ .word sys_nis_syscall, sys_ni_syscall, sys_delete_module, sys_ni_syscall, sys_getpgid |
141 | .word sys_bdflush, sys_sysfs, sys_nis_syscall, sys_setfsuid, sys_setfsgid | 141 | .word sys_bdflush, sys_sysfs, sys_nis_syscall, sys_setfsuid, sys_setfsgid |
142 | /*230*/ .word sys_select, sys_nis_syscall, sys_splice, sys_stime, sys_statfs64 | 142 | /*230*/ .word sys_select, sys_nis_syscall, sys_splice, sys_stime, sys_statfs64 |
diff --git a/arch/um/sys-i386/syscalls.c b/arch/um/sys-i386/syscalls.c index d0aa8f125ee6..70ca357393b8 100644 --- a/arch/um/sys-i386/syscalls.c +++ b/arch/um/sys-i386/syscalls.c | |||
@@ -34,92 +34,6 @@ long sys_clone(unsigned long clone_flags, unsigned long newsp, | |||
34 | return ret; | 34 | return ret; |
35 | } | 35 | } |
36 | 36 | ||
37 | /* | ||
38 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
39 | * | ||
40 | * This is really horribly ugly. | ||
41 | */ | ||
42 | long sys_ipc (uint call, int first, int second, | ||
43 | int third, void __user *ptr, long fifth) | ||
44 | { | ||
45 | int version, ret; | ||
46 | |||
47 | version = call >> 16; /* hack for backward compatibility */ | ||
48 | call &= 0xffff; | ||
49 | |||
50 | switch (call) { | ||
51 | case SEMOP: | ||
52 | return sys_semtimedop(first, (struct sembuf __user *) ptr, | ||
53 | second, NULL); | ||
54 | case SEMTIMEDOP: | ||
55 | return sys_semtimedop(first, (struct sembuf __user *) ptr, | ||
56 | second, | ||
57 | (const struct timespec __user *) fifth); | ||
58 | case SEMGET: | ||
59 | return sys_semget (first, second, third); | ||
60 | case SEMCTL: { | ||
61 | union semun fourth; | ||
62 | if (!ptr) | ||
63 | return -EINVAL; | ||
64 | if (get_user(fourth.__pad, (void __user * __user *) ptr)) | ||
65 | return -EFAULT; | ||
66 | return sys_semctl (first, second, third, fourth); | ||
67 | } | ||
68 | |||
69 | case MSGSND: | ||
70 | return sys_msgsnd (first, (struct msgbuf *) ptr, | ||
71 | second, third); | ||
72 | case MSGRCV: | ||
73 | switch (version) { | ||
74 | case 0: { | ||
75 | struct ipc_kludge tmp; | ||
76 | if (!ptr) | ||
77 | return -EINVAL; | ||
78 | |||
79 | if (copy_from_user(&tmp, | ||
80 | (struct ipc_kludge *) ptr, | ||
81 | sizeof (tmp))) | ||
82 | return -EFAULT; | ||
83 | return sys_msgrcv (first, tmp.msgp, second, | ||
84 | tmp.msgtyp, third); | ||
85 | } | ||
86 | default: | ||
87 | panic("msgrcv with version != 0"); | ||
88 | return sys_msgrcv (first, | ||
89 | (struct msgbuf *) ptr, | ||
90 | second, fifth, third); | ||
91 | } | ||
92 | case MSGGET: | ||
93 | return sys_msgget ((key_t) first, second); | ||
94 | case MSGCTL: | ||
95 | return sys_msgctl (first, second, (struct msqid_ds *) ptr); | ||
96 | |||
97 | case SHMAT: | ||
98 | switch (version) { | ||
99 | default: { | ||
100 | ulong raddr; | ||
101 | ret = do_shmat (first, (char *) ptr, second, &raddr); | ||
102 | if (ret) | ||
103 | return ret; | ||
104 | return put_user (raddr, (ulong *) third); | ||
105 | } | ||
106 | case 1: /* iBCS2 emulator entry point */ | ||
107 | if (!segment_eq(get_fs(), get_ds())) | ||
108 | return -EINVAL; | ||
109 | return do_shmat (first, (char *) ptr, second, (ulong *) third); | ||
110 | } | ||
111 | case SHMDT: | ||
112 | return sys_shmdt ((char *)ptr); | ||
113 | case SHMGET: | ||
114 | return sys_shmget (first, second, third); | ||
115 | case SHMCTL: | ||
116 | return sys_shmctl (first, second, | ||
117 | (struct shmid_ds *) ptr); | ||
118 | default: | ||
119 | return -ENOSYS; | ||
120 | } | ||
121 | } | ||
122 | |||
123 | long sys_sigaction(int sig, const struct old_sigaction __user *act, | 37 | long sys_sigaction(int sig, const struct old_sigaction __user *act, |
124 | struct old_sigaction __user *oact) | 38 | struct old_sigaction __user *oact) |
125 | { | 39 | { |
diff --git a/arch/x86/include/asm/syscalls.h b/arch/x86/include/asm/syscalls.h index 86ab6a0623fd..50f6a569f0d1 100644 --- a/arch/x86/include/asm/syscalls.h +++ b/arch/x86/include/asm/syscalls.h | |||
@@ -54,7 +54,6 @@ unsigned long sys_sigreturn(struct pt_regs *); | |||
54 | struct oldold_utsname; | 54 | struct oldold_utsname; |
55 | struct old_utsname; | 55 | struct old_utsname; |
56 | 56 | ||
57 | asmlinkage int sys_ipc(uint, int, int, int, void __user *, long); | ||
58 | asmlinkage int sys_uname(struct old_utsname __user *); | 57 | asmlinkage int sys_uname(struct old_utsname __user *); |
59 | asmlinkage int sys_olduname(struct oldold_utsname __user *); | 58 | asmlinkage int sys_olduname(struct oldold_utsname __user *); |
60 | 59 | ||
diff --git a/arch/x86/include/asm/unistd_32.h b/arch/x86/include/asm/unistd_32.h index daa65d9aae95..45e64a17b86e 100644 --- a/arch/x86/include/asm/unistd_32.h +++ b/arch/x86/include/asm/unistd_32.h | |||
@@ -354,6 +354,7 @@ | |||
354 | #define __ARCH_WANT_STAT64 | 354 | #define __ARCH_WANT_STAT64 |
355 | #define __ARCH_WANT_SYS_ALARM | 355 | #define __ARCH_WANT_SYS_ALARM |
356 | #define __ARCH_WANT_SYS_GETHOSTNAME | 356 | #define __ARCH_WANT_SYS_GETHOSTNAME |
357 | #define __ARCH_WANT_SYS_IPC | ||
357 | #define __ARCH_WANT_SYS_PAUSE | 358 | #define __ARCH_WANT_SYS_PAUSE |
358 | #define __ARCH_WANT_SYS_SGETMASK | 359 | #define __ARCH_WANT_SYS_SGETMASK |
359 | #define __ARCH_WANT_SYS_SIGNAL | 360 | #define __ARCH_WANT_SYS_SIGNAL |
diff --git a/arch/x86/kernel/sys_i386_32.c b/arch/x86/kernel/sys_i386_32.c index 7955e90c8341..8b5c348fdcf2 100644 --- a/arch/x86/kernel/sys_i386_32.c +++ b/arch/x86/kernel/sys_i386_32.c | |||
@@ -25,91 +25,6 @@ | |||
25 | #include <asm/syscalls.h> | 25 | #include <asm/syscalls.h> |
26 | 26 | ||
27 | /* | 27 | /* |
28 | * sys_ipc() is the de-multiplexer for the SysV IPC calls.. | ||
29 | * | ||
30 | * This is really horribly ugly. | ||
31 | */ | ||
32 | asmlinkage int sys_ipc(uint call, int first, int second, | ||
33 | int third, void __user *ptr, long fifth) | ||
34 | { | ||
35 | int version, ret; | ||
36 | |||
37 | version = call >> 16; /* hack for backward compatibility */ | ||
38 | call &= 0xffff; | ||
39 | |||
40 | switch (call) { | ||
41 | case SEMOP: | ||
42 | return sys_semtimedop(first, (struct sembuf __user *)ptr, second, NULL); | ||
43 | case SEMTIMEDOP: | ||
44 | return sys_semtimedop(first, (struct sembuf __user *)ptr, second, | ||
45 | (const struct timespec __user *)fifth); | ||
46 | |||
47 | case SEMGET: | ||
48 | return sys_semget(first, second, third); | ||
49 | case SEMCTL: { | ||
50 | union semun fourth; | ||
51 | if (!ptr) | ||
52 | return -EINVAL; | ||
53 | if (get_user(fourth.__pad, (void __user * __user *) ptr)) | ||
54 | return -EFAULT; | ||
55 | return sys_semctl(first, second, third, fourth); | ||
56 | } | ||
57 | |||
58 | case MSGSND: | ||
59 | return sys_msgsnd(first, (struct msgbuf __user *) ptr, | ||
60 | second, third); | ||
61 | case MSGRCV: | ||
62 | switch (version) { | ||
63 | case 0: { | ||
64 | struct ipc_kludge tmp; | ||
65 | if (!ptr) | ||
66 | return -EINVAL; | ||
67 | |||
68 | if (copy_from_user(&tmp, | ||
69 | (struct ipc_kludge __user *) ptr, | ||
70 | sizeof(tmp))) | ||
71 | return -EFAULT; | ||
72 | return sys_msgrcv(first, tmp.msgp, second, | ||
73 | tmp.msgtyp, third); | ||
74 | } | ||
75 | default: | ||
76 | return sys_msgrcv(first, | ||
77 | (struct msgbuf __user *) ptr, | ||
78 | second, fifth, third); | ||
79 | } | ||
80 | case MSGGET: | ||
81 | return sys_msgget((key_t) first, second); | ||
82 | case MSGCTL: | ||
83 | return sys_msgctl(first, second, (struct msqid_ds __user *) ptr); | ||
84 | |||
85 | case SHMAT: | ||
86 | switch (version) { | ||
87 | default: { | ||
88 | ulong raddr; | ||
89 | ret = do_shmat(first, (char __user *) ptr, second, &raddr); | ||
90 | if (ret) | ||
91 | return ret; | ||
92 | return put_user(raddr, (ulong __user *) third); | ||
93 | } | ||
94 | case 1: /* iBCS2 emulator entry point */ | ||
95 | if (!segment_eq(get_fs(), get_ds())) | ||
96 | return -EINVAL; | ||
97 | /* The "(ulong *) third" is valid _only_ because of the kernel segment thing */ | ||
98 | return do_shmat(first, (char __user *) ptr, second, (ulong *) third); | ||
99 | } | ||
100 | case SHMDT: | ||
101 | return sys_shmdt((char __user *)ptr); | ||
102 | case SHMGET: | ||
103 | return sys_shmget(first, second, third); | ||
104 | case SHMCTL: | ||
105 | return sys_shmctl(first, second, | ||
106 | (struct shmid_ds __user *) ptr); | ||
107 | default: | ||
108 | return -ENOSYS; | ||
109 | } | ||
110 | } | ||
111 | |||
112 | /* | ||
113 | * Old cruft | 28 | * Old cruft |
114 | */ | 29 | */ |
115 | asmlinkage int sys_uname(struct old_utsname __user *name) | 30 | asmlinkage int sys_uname(struct old_utsname __user *name) |
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index b60907e3b0d5..fbb61ae70e06 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
@@ -684,6 +684,8 @@ asmlinkage long sys_shmat(int shmid, char __user *shmaddr, int shmflg); | |||
684 | asmlinkage long sys_shmget(key_t key, size_t size, int flag); | 684 | asmlinkage long sys_shmget(key_t key, size_t size, int flag); |
685 | asmlinkage long sys_shmdt(char __user *shmaddr); | 685 | asmlinkage long sys_shmdt(char __user *shmaddr); |
686 | asmlinkage long sys_shmctl(int shmid, int cmd, struct shmid_ds __user *buf); | 686 | asmlinkage long sys_shmctl(int shmid, int cmd, struct shmid_ds __user *buf); |
687 | asmlinkage long sys_ipc(unsigned int call, int first, int second, | ||
688 | unsigned long third, void __user *ptr, long fifth); | ||
687 | 689 | ||
688 | asmlinkage long sys_mq_open(const char __user *name, int oflag, mode_t mode, struct mq_attr __user *attr); | 690 | asmlinkage long sys_mq_open(const char __user *name, int oflag, mode_t mode, struct mq_attr __user *attr); |
689 | asmlinkage long sys_mq_unlink(const char __user *name); | 691 | asmlinkage long sys_mq_unlink(const char __user *name); |
diff --git a/ipc/Makefile b/ipc/Makefile index 4e1955ea815d..9075e172e52c 100644 --- a/ipc/Makefile +++ b/ipc/Makefile | |||
@@ -3,7 +3,7 @@ | |||
3 | # | 3 | # |
4 | 4 | ||
5 | obj-$(CONFIG_SYSVIPC_COMPAT) += compat.o | 5 | obj-$(CONFIG_SYSVIPC_COMPAT) += compat.o |
6 | obj-$(CONFIG_SYSVIPC) += util.o msgutil.o msg.o sem.o shm.o ipcns_notifier.o | 6 | obj-$(CONFIG_SYSVIPC) += util.o msgutil.o msg.o sem.o shm.o ipcns_notifier.o syscall.o |
7 | obj-$(CONFIG_SYSVIPC_SYSCTL) += ipc_sysctl.o | 7 | obj-$(CONFIG_SYSVIPC_SYSCTL) += ipc_sysctl.o |
8 | obj_mq-$(CONFIG_COMPAT) += compat_mq.o | 8 | obj_mq-$(CONFIG_COMPAT) += compat_mq.o |
9 | obj-$(CONFIG_POSIX_MQUEUE) += mqueue.o msgutil.o $(obj_mq-y) | 9 | obj-$(CONFIG_POSIX_MQUEUE) += mqueue.o msgutil.o $(obj_mq-y) |
diff --git a/ipc/syscall.c b/ipc/syscall.c new file mode 100644 index 000000000000..355a3da9ec73 --- /dev/null +++ b/ipc/syscall.c | |||
@@ -0,0 +1,99 @@ | |||
1 | /* | ||
2 | * sys_ipc() is the old de-multiplexer for the SysV IPC calls. | ||
3 | * | ||
4 | * This is really horribly ugly, and new architectures should just wire up | ||
5 | * the individual syscalls instead. | ||
6 | */ | ||
7 | #include <linux/unistd.h> | ||
8 | |||
9 | #ifdef __ARCH_WANT_SYS_IPC | ||
10 | #include <linux/errno.h> | ||
11 | #include <linux/ipc.h> | ||
12 | #include <linux/shm.h> | ||
13 | #include <linux/syscalls.h> | ||
14 | #include <linux/uaccess.h> | ||
15 | |||
16 | SYSCALL_DEFINE6(ipc, unsigned int, call, int, first, int, second, | ||
17 | unsigned long, third, void __user *, ptr, long, fifth) | ||
18 | { | ||
19 | int version, ret; | ||
20 | |||
21 | version = call >> 16; /* hack for backward compatibility */ | ||
22 | call &= 0xffff; | ||
23 | |||
24 | switch (call) { | ||
25 | case SEMOP: | ||
26 | return sys_semtimedop(first, (struct sembuf __user *)ptr, | ||
27 | second, NULL); | ||
28 | case SEMTIMEDOP: | ||
29 | return sys_semtimedop(first, (struct sembuf __user *)ptr, | ||
30 | second, | ||
31 | (const struct timespec __user *)fifth); | ||
32 | |||
33 | case SEMGET: | ||
34 | return sys_semget(first, second, third); | ||
35 | case SEMCTL: { | ||
36 | union semun fourth; | ||
37 | if (!ptr) | ||
38 | return -EINVAL; | ||
39 | if (get_user(fourth.__pad, (void __user * __user *) ptr)) | ||
40 | return -EFAULT; | ||
41 | return sys_semctl(first, second, third, fourth); | ||
42 | } | ||
43 | |||
44 | case MSGSND: | ||
45 | return sys_msgsnd(first, (struct msgbuf __user *) ptr, | ||
46 | second, third); | ||
47 | case MSGRCV: | ||
48 | switch (version) { | ||
49 | case 0: { | ||
50 | struct ipc_kludge tmp; | ||
51 | if (!ptr) | ||
52 | return -EINVAL; | ||
53 | |||
54 | if (copy_from_user(&tmp, | ||
55 | (struct ipc_kludge __user *) ptr, | ||
56 | sizeof(tmp))) | ||
57 | return -EFAULT; | ||
58 | return sys_msgrcv(first, tmp.msgp, second, | ||
59 | tmp.msgtyp, third); | ||
60 | } | ||
61 | default: | ||
62 | return sys_msgrcv(first, | ||
63 | (struct msgbuf __user *) ptr, | ||
64 | second, fifth, third); | ||
65 | } | ||
66 | case MSGGET: | ||
67 | return sys_msgget((key_t) first, second); | ||
68 | case MSGCTL: | ||
69 | return sys_msgctl(first, second, (struct msqid_ds __user *)ptr); | ||
70 | |||
71 | case SHMAT: | ||
72 | switch (version) { | ||
73 | default: { | ||
74 | unsigned long raddr; | ||
75 | ret = do_shmat(first, (char __user *)ptr, | ||
76 | second, &raddr); | ||
77 | if (ret) | ||
78 | return ret; | ||
79 | return put_user(raddr, (unsigned long __user *) third); | ||
80 | } | ||
81 | case 1: | ||
82 | /* | ||
83 | * This was the entry point for kernel-originating calls | ||
84 | * from iBCS2 in 2.2 days. | ||
85 | */ | ||
86 | return -EINVAL; | ||
87 | } | ||
88 | case SHMDT: | ||
89 | return sys_shmdt((char __user *)ptr); | ||
90 | case SHMGET: | ||
91 | return sys_shmget(first, second, third); | ||
92 | case SHMCTL: | ||
93 | return sys_shmctl(first, second, | ||
94 | (struct shmid_ds __user *) ptr); | ||
95 | default: | ||
96 | return -ENOSYS; | ||
97 | } | ||
98 | } | ||
99 | #endif | ||
diff --git a/kernel/sys_ni.c b/kernel/sys_ni.c index 695384f12a7d..70f2ea758ffe 100644 --- a/kernel/sys_ni.c +++ b/kernel/sys_ni.c | |||
@@ -126,6 +126,7 @@ cond_syscall(sys_setreuid16); | |||
126 | cond_syscall(sys_setuid16); | 126 | cond_syscall(sys_setuid16); |
127 | cond_syscall(sys_vm86old); | 127 | cond_syscall(sys_vm86old); |
128 | cond_syscall(sys_vm86); | 128 | cond_syscall(sys_vm86); |
129 | cond_syscall(sys_ipc); | ||
129 | cond_syscall(compat_sys_ipc); | 130 | cond_syscall(compat_sys_ipc); |
130 | cond_syscall(compat_sys_sysctl); | 131 | cond_syscall(compat_sys_sysctl); |
131 | cond_syscall(sys_flock); | 132 | cond_syscall(sys_flock); |