I think this is the upstream change which would fix this. Please test this on top of the previous one, in case there are any more cases where ipv6_select_ident() may be called with a rt == NULL. However, it seems that with this change, when a VM offloads UDP/IPv6 fragmentation to us, we will always set the fragmentation ID to 0. I'm not sure whether that's a regression from 3.2.62, but I think it is. We should not be choosing fragment IDs for VMs, but currently they aren't telling us what to use! I've queried this upstream. Ben. -- Ben Hutchings For every action, there is an equal and opposite criticism. - Harrison
From: Hannes Frederic Sowa <hannes@stressinduktion.org> Date: Fri, 21 Feb 2014 02:55:35 +0100 Subject: ipv6: reuse ip6_frag_id from ip6_ufo_append_data Origin: https://git.kernel.org/linus/916e4cf46d0204806c062c8c6c4d1f633852c5b6 Currently we generate a new fragmentation id on UFO segmentation. It is pretty hairy to identify the correct net namespace and dst there. Especially tunnels use IFF_XMIT_DST_RELEASE and thus have no skb_dst available at all. This causes unreliable or very predictable ipv6 fragmentation id generation while segmentation. Luckily we already have pregenerated the ip6_frag_id in ip6_ufo_append_data and can use it here. Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org> Signed-off-by: David S. Miller <davem@davemloft.net> [bwh: Backported to 3.2: adjust filename, indentation] --- net/ipv6/udp_offload.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c @@ -1362,7 +1362,7 @@ static struct sk_buff *udp6_ufo_fragment fptr = (struct frag_hdr *)(skb_network_header(skb) + unfrag_ip6hlen); fptr->nexthdr = nexthdr; fptr->reserved = 0; - ipv6_select_ident(fptr, (struct rt6_info *)skb_dst(skb)); + fptr->identification = skb_shinfo(skb)->ip6_frag_id; /* Fragment the skb. ipv6 header and the remaining fields of the * fragment header are updated in ipv6_gso_segment()
Attachment:
signature.asc
Description: This is a digitally signed message part