mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	udp: document udp_rcv_segment special case for looped packets
Commit 6cd021a58c ("udp: segment looped gso packets correctly")
fixes an issue with rare udp gso multicast packets looped onto the
receive path.
The stable backport makes the narrowest change to target only these
packets, when needed. As opposed to, say, expanding __udp_gso_segment,
which is harder to reason to be free from unintended side-effects.
But the resulting code is hardly self-describing.
Document its purpose and rationale.
Signed-off-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
			
			
This commit is contained in:
		
							parent
							
								
									389b8fb3c4
								
							
						
					
					
						commit
						d0208bf4da
					
				
					 1 changed files with 7 additions and 0 deletions
				
			
		| 
						 | 
					@ -476,6 +476,13 @@ static inline struct sk_buff *udp_rcv_segment(struct sock *sk,
 | 
				
			||||||
	if (!inet_get_convert_csum(sk))
 | 
						if (!inet_get_convert_csum(sk))
 | 
				
			||||||
		features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
 | 
							features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* UDP segmentation expects packets of type CHECKSUM_PARTIAL or
 | 
				
			||||||
 | 
						 * CHECKSUM_NONE in __udp_gso_segment. UDP GRO indeed builds partial
 | 
				
			||||||
 | 
						 * packets in udp_gro_complete_segment. As does UDP GSO, verified by
 | 
				
			||||||
 | 
						 * udp_send_skb. But when those packets are looped in dev_loopback_xmit
 | 
				
			||||||
 | 
						 * their ip_summed is set to CHECKSUM_UNNECESSARY. Reset in this
 | 
				
			||||||
 | 
						 * specific case, where PARTIAL is both correct and required.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
	if (skb->pkt_type == PACKET_LOOPBACK)
 | 
						if (skb->pkt_type == PACKET_LOOPBACK)
 | 
				
			||||||
		skb->ip_summed = CHECKSUM_PARTIAL;
 | 
							skb->ip_summed = CHECKSUM_PARTIAL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue