]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
skmsg: Return copied bytes in sk_msg_memcopy_from_iter
authorLevi Zim <rsworktech@outlook.com>
Sat, 30 Nov 2024 13:38:22 +0000 (21:38 +0800)
committerDaniel Borkmann <daniel@iogearbox.net>
Fri, 20 Dec 2024 21:53:36 +0000 (22:53 +0100)
Previously sk_msg_memcopy_from_iter returns the copied bytes from the
last copy_from_iter{,_nocache} call upon success.

This commit changes it to return the total number of copied bytes on
success.

Signed-off-by: Levi Zim <rsworktech@outlook.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Tested-by: Björn Töpel <bjorn@kernel.org>
Reviewed-by: John Fastabend <john.fastabend@gmail.com>
Link: https://lore.kernel.org/bpf/20241130-tcp-bpf-sendmsg-v1-1-bae583d014f3@outlook.com
net/core/skmsg.c

index 8ad7e6755fd64295fd133980ac7f5dd7ed5cc799..61f3f3d4e52856c5c1355c3b419adec82f97c571 100644 (file)
@@ -369,8 +369,8 @@ int sk_msg_memcopy_from_iter(struct sock *sk, struct iov_iter *from,
                             struct sk_msg *msg, u32 bytes)
 {
        int ret = -ENOSPC, i = msg->sg.curr;
+       u32 copy, buf_size, copied = 0;
        struct scatterlist *sge;
-       u32 copy, buf_size;
        void *to;
 
        do {
@@ -397,6 +397,7 @@ int sk_msg_memcopy_from_iter(struct sock *sk, struct iov_iter *from,
                        goto out;
                }
                bytes -= copy;
+               copied += copy;
                if (!bytes)
                        break;
                msg->sg.copybreak = 0;
@@ -404,7 +405,7 @@ int sk_msg_memcopy_from_iter(struct sock *sk, struct iov_iter *from,
        } while (i != msg->sg.end);
 out:
        msg->sg.curr = i;
-       return ret;
+       return (ret < 0) ? ret : copied;
 }
 EXPORT_SYMBOL_GPL(sk_msg_memcopy_from_iter);