diff -ur vsock-only.orig/linux/af_vsock.c vsock-only/linux/af_vsock.c --- vsock-only.orig/linux/af_vsock.c 2015-02-21 18:09:14.147266976 +0100 +++ vsock-only/linux/af_vsock.c 2015-02-21 18:14:07.134285068 +0100 @@ -233,13 +233,13 @@ char __user *optval, int __user * optlen); static int VSockVmciDgramSendmsg(struct kiocb *kiocb, - struct socket *sock, struct msghdr *msg, size_t len); + struct socket *sock, struct user_msghdr *msg, size_t len); static int VSockVmciDgramRecvmsg(struct kiocb *kiocb, struct socket *sock, - struct msghdr *msg, size_t len, int flags); + struct user_msghdr *msg, size_t len, int flags); static int VSockVmciStreamSendmsg(struct kiocb *kiocb, - struct socket *sock, struct msghdr *msg, size_t len); + struct socket *sock, struct user_msghdr *msg, size_t len); static int VSockVmciStreamRecvmsg(struct kiocb *kiocb, struct socket *sock, - struct msghdr *msg, size_t len, int flags); + struct user_msghdr *msg, size_t len, int flags); static int VSockVmciCreate( #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 24) @@ -4195,7 +4195,7 @@ static int VSockVmciDgramSendmsg(struct kiocb *kiocb, // UNUSED struct socket *sock, // IN: socket to send on - struct msghdr *msg, // IN: message to send + struct user_msghdr *msg, // IN: message to send size_t len) // IN: length of message { int err; @@ -4525,7 +4525,7 @@ static int VSockVmciStreamSendmsg(struct kiocb *kiocb, // UNUSED struct socket *sock, // IN: socket to send on - struct msghdr *msg, // IN: message to send + struct user_msghdr *msg, // IN: message to send size_t len) // IN: length of message { struct sock *sk; @@ -4694,7 +4694,7 @@ static int VSockVmciDgramRecvmsg(struct kiocb *kiocb, // UNUSED struct socket *sock, // IN: socket to receive from - struct msghdr *msg, // IN/OUT: message to receive into + struct user_msghdr *msg, // IN/OUT: message to receive into size_t len, // IN: length of receive buffer int flags) // IN: receive flags { @@ -4704,6 +4704,7 @@ VMCIDatagram *dg; size_t payloadLen; struct sk_buff *skb; + struct iov_iter to; sk = sock->sk; noblock = flags & MSG_DONTWAIT; @@ -4742,7 +4743,8 @@ } /* Place the datagram payload in the user's iovec. */ - err = skb_copy_datagram_iovec(skb, sizeof *dg, msg->msg_iov, payloadLen); + iov_iter_init(&to, READ, msg->msg_iov, 1, payloadLen); + err = skb_copy_datagram_iter(skb, sizeof *dg, &to, payloadLen); if (err) { goto out; } @@ -4785,7 +4787,7 @@ static int VSockVmciStreamRecvmsg(struct kiocb *kiocb, // UNUSED struct socket *sock, // IN: socket to receive from - struct msghdr *msg, // IN/OUT: message to receive into + struct user_msghdr *msg, // IN/OUT: message to receive into size_t len, // IN: length of receive buffer int flags) // IN: receive flags {