From: François LEGAL <[email protected]> Add rtipc_get_arg (copy_from_ser) call on struct user_msghdr.
Signed-off-by: François LEGAL <[email protected]> --- kernel/drivers/ipc/iddp.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/kernel/drivers/ipc/iddp.c b/kernel/drivers/ipc/iddp.c index 2a80eba..3eff24e 100644 --- a/kernel/drivers/ipc/iddp.c +++ b/kernel/drivers/ipc/iddp.c @@ -324,12 +324,17 @@ static ssize_t __iddp_recvmsg(struct rtdm_fd *fd, } static ssize_t iddp_recvmsg(struct rtdm_fd *fd, - struct user_msghdr *msg, int flags) + struct user_msghdr *u_msg, int flags) { struct iovec iov_fast[RTDM_IOV_FASTMAX], *iov; struct sockaddr_ipc saddr; + struct user_msghdr _msg, *msg = & _msg; ssize_t ret; + ret = rtipc_get_arg(fd, &_msg, u_msg, sizeof(_msg)); + if (ret) + return -ret; + if (flags & ~MSG_DONTWAIT) return -EINVAL; @@ -467,14 +472,19 @@ fail: } static ssize_t iddp_sendmsg(struct rtdm_fd *fd, - const struct user_msghdr *msg, int flags) + const struct user_msghdr *u_msg, int flags) { struct rtipc_private *priv = rtdm_fd_to_private(fd); struct iovec iov_fast[RTDM_IOV_FASTMAX], *iov; struct iddp_socket *sk = priv->state; struct sockaddr_ipc daddr; + struct user_msghdr _msg, *msg = & _msg; ssize_t ret; + ret = rtipc_get_arg(fd, &_msg, u_msg, sizeof(_msg)); + if (ret) + return -ret; + if (flags & ~(MSG_OOB | MSG_DONTWAIT)) return -EINVAL;
