Commit f1538310 authored by Hugh Dickins's avatar Hugh Dickins Committed by Jakub Kicinski

net: fix rc7's __skb_datagram_iter()

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: d2d30a37 ("net: allow skb_datagram_iter to be called from any context")
Signed-off-by: default avatarHugh Dickins <hughd@google.com>
Reviewed-by: default avatarSagi Grimberg <sagi@grimberg.me>
Link: https://patch.msgid.link/fef352e8-b89a-da51-f8ce-04bc39ee6481@google.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 528269fe
...@@ -423,11 +423,12 @@ static int __skb_datagram_iter(const struct sk_buff *skb, int offset, ...@@ -423,11 +423,12 @@ static int __skb_datagram_iter(const struct sk_buff *skb, int offset,
if (copy > len) if (copy > len)
copy = len; copy = len;
n = 0;
skb_frag_foreach_page(frag, skb_frag_foreach_page(frag,
skb_frag_off(frag) + offset - start, skb_frag_off(frag) + offset - start,
copy, p, p_off, p_len, copied) { copy, p, p_off, p_len, copied) {
vaddr = kmap_local_page(p); 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); vaddr + p_off, p_len, data, to);
kunmap_local(vaddr); kunmap_local(vaddr);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment