linux-mips
[Top] [All Lists]

[PATCH] Fix N32 SysV IPC routines

To: linux-mips@linux-mips.org
Subject: [PATCH] Fix N32 SysV IPC routines
From: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Date: Wed, 10 Jan 2007 18:53:33 +0900 (JST)
Cc: ralf@linux-mips.org, kaz@zeugmasystems.com, drow@false.org
Original-recipient: rfc822;linux-mips@linux-mips.org
Sender: linux-mips-bounce@linux-mips.org
Add wrappers for N32 msg{snd,rcv} while compat_sys_msg{snd,rcv} could
not be used as system call entries as is.  This fix is based on patch
originally made by Kaz Kylheku.

Also change a type of last argument of sysn32_semctl to match its true
size.

Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
---
 linux32.c     |   16 ++++++++--
 scall64-n32.S |    4 +-
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/arch/mips/kernel/linux32.c b/arch/mips/kernel/linux32.c
index b061c9a..de3fae2 100644
--- a/arch/mips/kernel/linux32.c
+++ b/arch/mips/kernel/linux32.c
@@ -440,14 +440,26 @@ sys32_ipc (u32 call, int first, int seco
 }
 
 #ifdef CONFIG_MIPS32_N32
-asmlinkage long sysn32_semctl(int semid, int semnum, int cmd, union semun arg)
+asmlinkage long sysn32_semctl(int semid, int semnum, int cmd, u32 arg)
 {
        /* compat_sys_semctl expects a pointer to union semun */
        u32 __user *uptr = compat_alloc_user_space(sizeof(u32));
-       if (put_user(ptr_to_compat(arg.__pad), uptr))
+       if (put_user(arg, uptr))
                return -EFAULT;
        return compat_sys_semctl(semid, semnum, cmd, uptr);
 }
+
+asmlinkage long sysn32_msgsnd(int msqid, u32 msgp, unsigned msgsz, int msgflg)
+{
+       return compat_sys_msgsnd(msqid, msgsz, msgflg, compat_ptr(msgp));
+}
+
+asmlinkage long sysn32_msgrcv(int msqid, u32 msgp, size_t msgsz, int msgtyp,
+                             int msgflg)
+{
+       return compat_sys_msgrcv(msqid, msgsz, msgtyp, msgflg, IPC_64,
+                                compat_ptr(msgp));
+}
 #endif
 
 struct sysctl_args32
diff --git a/arch/mips/kernel/scall64-n32.S b/arch/mips/kernel/scall64-n32.S
index 34567d8..a7bff2a 100644
--- a/arch/mips/kernel/scall64-n32.S
+++ b/arch/mips/kernel/scall64-n32.S
@@ -187,8 +187,8 @@ EXPORT(sysn32_call_table)
        PTR     sysn32_semctl
        PTR     sys_shmdt                       /* 6065 */
        PTR     sys_msgget
-       PTR     compat_sys_msgsnd
-       PTR     compat_sys_msgrcv
+       PTR     sysn32_msgsnd
+       PTR     sysn32_msgrcv
        PTR     compat_sys_msgctl
        PTR     compat_sys_fcntl                /* 6070 */
        PTR     sys_flock

<Prev in Thread] Current Thread [Next in Thread>
  • [PATCH] Fix N32 SysV IPC routines, Atsushi Nemoto <=