]> www.infradead.org Git - users/hch/xfs.git/commitdiff
net: fix rc7's __skb_datagram_iter()
authorHugh Dickins <hughd@google.com>
Mon, 8 Jul 2024 14:46:00 +0000 (07:46 -0700)
committerJakub Kicinski <kuba@kernel.org>
Tue, 9 Jul 2024 18:24:54 +0000 (11:24 -0700)
X would not start in my old 32-bit partition (and the "n"-handling looks
just as wrong on 64-bit, but for whatever reason did not show up there):
"n" must be accumulated over all pages before it's added to "offset" and
compared with "copy", immediately after the skb_frag_foreach_page() loop.

Fixes: d2d30a376d9c ("net: allow skb_datagram_iter to be called from any context")
Signed-off-by: Hugh Dickins <hughd@google.com>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Link: https://patch.msgid.link/fef352e8-b89a-da51-f8ce-04bc39ee6481@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/core/datagram.c

index e9ba4c7b449dbf94e990d8eba9a3659e76b4f92b..e72dd78471a66e4a1f6743dc0245ad0ef8eb02eb 100644 (file)
@@ -423,11 +423,12 @@ static int __skb_datagram_iter(const struct sk_buff *skb, int offset,
                        if (copy > len)
                                copy = len;
 
+                       n = 0;
                        skb_frag_foreach_page(frag,
                                              skb_frag_off(frag) + offset - start,
                                              copy, p, p_off, p_len, copied) {
                                vaddr = kmap_local_page(p);
-                               n = INDIRECT_CALL_1(cb, simple_copy_to_iter,
+                               n += INDIRECT_CALL_1(cb, simple_copy_to_iter,
                                        vaddr + p_off, p_len, data, to);
                                kunmap_local(vaddr);
                        }