Hi David, On 3/7/22 18:58, David Laight wrote:
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index 4788f6b37053..622345af323e 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c @@ -1629,6 +1629,13 @@ static int __ip6_append_data(struct sock *sk, err = -EINVAL; goto error; }
if (unlikely(alloclen < fraglen)) {if (printk_ratelimit())pr_warn("%s: wrong alloclen: %d, fraglen: %d",__func__, alloclen, fraglen);alloclen = fraglen;}Except that is a valid case, see a few lines higher:
alloclen = min_t(int, fraglen, MAX_HEADER); pagedlen = fraglen - alloclen;You need to report the input values that cause the problem later on.
OK, but in this case it falls into the first if block: https://elixir.bootlin.com/linux/v5.17-rc7/source/net/ipv6/ip6_output.c#L160... where alloclen is assigned the value of mtu. The values in this case are just before the alloc_skb() are:
alloclen = 1480 alloc_extra = 136 datalen = 64095 fragheaderlen = 1480 fraglen = 65575 transhdrlen = 0 mtu = 1480