Merge tag 'audit-pr-20200601' of git://git.kernel.org/pub/scm/linux/kernel/git/pcmoor...
[linux-2.6-microblaze.git] / net / socket.c
index 2eecf15..2dd739f 100644 (file)
@@ -2228,10 +2228,10 @@ struct used_address {
        unsigned int name_len;
 };
 
-static int copy_msghdr_from_user(struct msghdr *kmsg,
-                                struct user_msghdr __user *umsg,
-                                struct sockaddr __user **save_addr,
-                                struct iovec **iov)
+int __copy_msghdr_from_user(struct msghdr *kmsg,
+                           struct user_msghdr __user *umsg,
+                           struct sockaddr __user **save_addr,
+                           struct iovec __user **uiov, size_t *nsegs)
 {
        struct user_msghdr msg;
        ssize_t err;
@@ -2273,6 +2273,23 @@ static int copy_msghdr_from_user(struct msghdr *kmsg,
                return -EMSGSIZE;
 
        kmsg->msg_iocb = NULL;
+       *uiov = msg.msg_iov;
+       *nsegs = msg.msg_iovlen;
+       return 0;
+}
+
+static int copy_msghdr_from_user(struct msghdr *kmsg,
+                                struct user_msghdr __user *umsg,
+                                struct sockaddr __user **save_addr,
+                                struct iovec **iov)
+{
+       struct user_msghdr msg;
+       ssize_t err;
+
+       err = __copy_msghdr_from_user(kmsg, umsg, save_addr, &msg.msg_iov,
+                                       &msg.msg_iovlen);
+       if (err)
+               return err;
 
        err = import_iovec(save_addr ? READ : WRITE,
                            msg.msg_iov, msg.msg_iovlen,