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;


Reply via email to