diff options
author | Atsushi Nemoto <anemo@mba.ocn.ne.jp> | 2006-11-07 04:02:44 -0500 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2006-12-04 17:43:12 -0500 |
commit | 05e4396651ca1cac51d8da9ff4992741c9dc1e39 (patch) | |
tree | 15881e19dfd7550dbe26245a356a10a979577086 /include | |
parent | 9567772f14f6d2692ea88ddc111a5a6b352fd512 (diff) |
[MIPS] Use SYSVIPC_COMPAT to fix various problems on N32
N32 SysV IPC system calls should use 32-bit compatible code.
arch/mips/kernel/linux32.c have similar compatible code for O32, but
ipc/compat.c seems more complete. We can use it for both N32 and O32.
This patch should fix these problems (and other possible problems):
http://www.linux-mips.org/cgi-bin/mesg.cgi?a=linux-mips&i=1149188824.6986.6.camel%40diimka-laptop
http://www.linux-mips.org/cgi-bin/mesg.cgi?a=linux-mips&i=44C6B829.8050508%40caviumnetworks.com
Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-mips/compat.h | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/include/asm-mips/compat.h b/include/asm-mips/compat.h index 900f472fdd2b..55a0152feb08 100644 --- a/include/asm-mips/compat.h +++ b/include/asm-mips/compat.h | |||
@@ -32,6 +32,7 @@ typedef struct { | |||
32 | s32 val[2]; | 32 | s32 val[2]; |
33 | } compat_fsid_t; | 33 | } compat_fsid_t; |
34 | typedef s32 compat_timer_t; | 34 | typedef s32 compat_timer_t; |
35 | typedef s32 compat_key_t; | ||
35 | 36 | ||
36 | typedef s32 compat_int_t; | 37 | typedef s32 compat_int_t; |
37 | typedef s32 compat_long_t; | 38 | typedef s32 compat_long_t; |
@@ -146,4 +147,71 @@ static inline void __user *compat_alloc_user_space(long len) | |||
146 | return (void __user *) (regs->regs[29] - len); | 147 | return (void __user *) (regs->regs[29] - len); |
147 | } | 148 | } |
148 | 149 | ||
150 | struct compat_ipc64_perm { | ||
151 | compat_key_t key; | ||
152 | __compat_uid32_t uid; | ||
153 | __compat_gid32_t gid; | ||
154 | __compat_uid32_t cuid; | ||
155 | __compat_gid32_t cgid; | ||
156 | compat_mode_t mode; | ||
157 | unsigned short seq; | ||
158 | unsigned short __pad2; | ||
159 | compat_ulong_t __unused1; | ||
160 | compat_ulong_t __unused2; | ||
161 | }; | ||
162 | |||
163 | struct compat_semid64_ds { | ||
164 | struct compat_ipc64_perm sem_perm; | ||
165 | compat_time_t sem_otime; | ||
166 | compat_time_t sem_ctime; | ||
167 | compat_ulong_t sem_nsems; | ||
168 | compat_ulong_t __unused1; | ||
169 | compat_ulong_t __unused2; | ||
170 | }; | ||
171 | |||
172 | struct compat_msqid64_ds { | ||
173 | struct compat_ipc64_perm msg_perm; | ||
174 | #ifndef CONFIG_CPU_LITTLE_ENDIAN | ||
175 | compat_ulong_t __unused1; | ||
176 | #endif | ||
177 | compat_time_t msg_stime; | ||
178 | #ifdef CONFIG_CPU_LITTLE_ENDIAN | ||
179 | compat_ulong_t __unused1; | ||
180 | #endif | ||
181 | #ifndef CONFIG_CPU_LITTLE_ENDIAN | ||
182 | compat_ulong_t __unused2; | ||
183 | #endif | ||
184 | compat_time_t msg_rtime; | ||
185 | #ifdef CONFIG_CPU_LITTLE_ENDIAN | ||
186 | compat_ulong_t __unused2; | ||
187 | #endif | ||
188 | #ifndef CONFIG_CPU_LITTLE_ENDIAN | ||
189 | compat_ulong_t __unused3; | ||
190 | #endif | ||
191 | compat_time_t msg_ctime; | ||
192 | #ifdef CONFIG_CPU_LITTLE_ENDIAN | ||
193 | compat_ulong_t __unused3; | ||
194 | #endif | ||
195 | compat_ulong_t msg_cbytes; | ||
196 | compat_ulong_t msg_qnum; | ||
197 | compat_ulong_t msg_qbytes; | ||
198 | compat_pid_t msg_lspid; | ||
199 | compat_pid_t msg_lrpid; | ||
200 | compat_ulong_t __unused4; | ||
201 | compat_ulong_t __unused5; | ||
202 | }; | ||
203 | |||
204 | struct compat_shmid64_ds { | ||
205 | struct compat_ipc64_perm shm_perm; | ||
206 | compat_size_t shm_segsz; | ||
207 | compat_time_t shm_atime; | ||
208 | compat_time_t shm_dtime; | ||
209 | compat_time_t shm_ctime; | ||
210 | compat_pid_t shm_cpid; | ||
211 | compat_pid_t shm_lpid; | ||
212 | compat_ulong_t shm_nattch; | ||
213 | compat_ulong_t __unused1; | ||
214 | compat_ulong_t __unused2; | ||
215 | }; | ||
216 | |||
149 | #endif /* _ASM_COMPAT_H */ | 217 | #endif /* _ASM_COMPAT_H */ |