diff options
author | Jianguo Wu <wujianguo@chinatelecom.cn> | 2021-12-08 18:03:33 +0800 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2021-12-09 07:48:07 -0800 |
commit | 158390e45612ef0fde160af0826f1740c36daf21 (patch) | |
tree | 8f398dda8e7966f50290cb67f3be86ac92a5a47e /net | |
parent | 0416e7af2369b0d12a28dea8d30b104df9a6953d (diff) | |
download | linux-stable-158390e45612ef0fde160af0826f1740c36daf21.tar.gz linux-stable-158390e45612ef0fde160af0826f1740c36daf21.tar.bz2 linux-stable-158390e45612ef0fde160af0826f1740c36daf21.zip |
udp: using datalen to cap max gso segments
The max number of UDP gso segments is intended to cap to UDP_MAX_SEGMENTS,
this is checked in udp_send_skb():
if (skb->len > cork->gso_size * UDP_MAX_SEGMENTS) {
kfree_skb(skb);
return -EINVAL;
}
skb->len contains network and transport header len here, we should use
only data len instead.
Fixes: bec1f6f69736 ("udp: generate gso with UDP_SEGMENT")
Signed-off-by: Jianguo Wu <wujianguo@chinatelecom.cn>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Link: https://lore.kernel.org/r/900742e5-81fb-30dc-6e0b-375c6cdd7982@163.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'net')
-rw-r--r-- | net/ipv4/udp.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index 8bcecdd6aeda..23b05e28490b 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -916,7 +916,7 @@ static int udp_send_skb(struct sk_buff *skb, struct flowi4 *fl4, kfree_skb(skb); return -EINVAL; } - if (skb->len > cork->gso_size * UDP_MAX_SEGMENTS) { + if (datalen > cork->gso_size * UDP_MAX_SEGMENTS) { kfree_skb(skb); return -EINVAL; } |