diff options
author | suzuki <suzuki@linux.vnet.ibm.com> | 2006-12-06 20:37:48 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.osdl.org> | 2006-12-07 08:39:38 -0800 |
commit | 651971cb7242e8f6d7ebd153e69bd271cb731223 (patch) | |
tree | 38c8bd3c461cb09a538664ddc78e5452fdf28f29 /include/linux/msg.h | |
parent | 19e5d9c0d2194b4b47189cbec2921cbf72b0bd1c (diff) | |
download | linux-stable-651971cb7242e8f6d7ebd153e69bd271cb731223.tar.gz linux-stable-651971cb7242e8f6d7ebd153e69bd271cb731223.tar.bz2 linux-stable-651971cb7242e8f6d7ebd153e69bd271cb731223.zip |
[PATCH] Fix the size limit of compat space msgsize
Currently we allocate 64k space on the user stack and use it the msgbuf for
sys_{msgrcv,msgsnd} for compat and the results are later copied in user [
by copy_in_user]. This patch introduces helper routines for
sys_{msgrcv,msgsnd} as below:
do_msgsnd() : Accepts the mtype and user space ptr to the buffer along with
the msqid and msgflg.
do_msgrcv() : Accepts a kernel space ptr to mtype and a userspace ptr to
the buffer. The mtype has to be copied back the user space msgbuf by the
caller.
These changes avoid the need to allocate the msgsize on the userspace (
thus removing the size limt ) and the overhead of an extra copy_in_user().
Signed-off-by: Suzuki K P <suzuki@in.ibm.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: "David S. Miller" <davem@davemloft.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include/linux/msg.h')
-rw-r--r-- | include/linux/msg.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/include/linux/msg.h b/include/linux/msg.h index acc7c174ff00..f1b60740d641 100644 --- a/include/linux/msg.h +++ b/include/linux/msg.h @@ -92,6 +92,12 @@ struct msg_queue { struct list_head q_senders; }; +/* Helper routines for sys_msgsnd and sys_msgrcv */ +extern long do_msgsnd(int msqid, long mtype, void __user *mtext, + size_t msgsz, int msgflg); +extern long do_msgrcv(int msqid, long *pmtype, void __user *mtext, + size_t msgsz, long msgtyp, int msgflg); + #endif /* __KERNEL__ */ #endif /* _LINUX_MSG_H */ |