mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	ipv6: defrag: drop non-last frags smaller than min mtu
don't bother with pathological cases, they only waste cycles.
IPv6 requires a minimum MTU of 1280 so we should never see fragments
smaller than this (except last frag).
v3: don't use awkward "-offset + len"
v2: drop IPv4 part, which added same check w. IPV4_MIN_MTU (68).
    There were concerns that there could be even smaller frags
    generated by intermediate nodes, e.g. on radio networks.
Cc: Peter Oskolkov <posk@google.com>
Cc: Eric Dumazet <edumazet@google.com>
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
			
			
This commit is contained in:
		
							parent
							
								
									c30f1fc041
								
							
						
					
					
						commit
						0ed4229b08
					
				
					 2 changed files with 8 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -558,6 +558,10 @@ int nf_ct_frag6_gather(struct net *net, struct sk_buff *skb, u32 user)
 | 
			
		|||
	hdr = ipv6_hdr(skb);
 | 
			
		||||
	fhdr = (struct frag_hdr *)skb_transport_header(skb);
 | 
			
		||||
 | 
			
		||||
	if (skb->len - skb_network_offset(skb) < IPV6_MIN_MTU &&
 | 
			
		||||
	    fhdr->frag_off & htons(IP6_MF))
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
 | 
			
		||||
	skb_orphan(skb);
 | 
			
		||||
	fq = fq_find(net, fhdr->identification, user, hdr,
 | 
			
		||||
		     skb->dev ? skb->dev->ifindex : 0);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -456,6 +456,10 @@ static int ipv6_frag_rcv(struct sk_buff *skb)
 | 
			
		|||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (skb->len - skb_network_offset(skb) < IPV6_MIN_MTU &&
 | 
			
		||||
	    fhdr->frag_off & htons(IP6_MF))
 | 
			
		||||
		goto fail_hdr;
 | 
			
		||||
 | 
			
		||||
	iif = skb->dev ? skb->dev->ifindex : 0;
 | 
			
		||||
	fq = fq_find(net, fhdr->identification, hdr, iif);
 | 
			
		||||
	if (fq) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue