udp: ipv4: manipulate network header of NATed UDP GRO fraglist
authorDongseok Yi <dseok.yi@samsung.com>
Fri, 29 Jan 2021 23:13:27 +0000 (08:13 +0900)
committerJakub Kicinski <kuba@kernel.org>
Tue, 2 Feb 2021 04:02:16 +0000 (20:02 -0800)
commitc3df39ac9b0e3747bf8233ea9ce4ed5ceb3199d3
treebfa81cf96b093ce286b310d189b47e4031728bfd
parent28e104d00281ade30250b24e098bf50887671ea4
udp: ipv4: manipulate network header of NATed UDP GRO fraglist

UDP/IP header of UDP GROed frag_skbs are not updated even after NAT
forwarding. Only the header of head_skb from ip_finish_output_gso ->
skb_gso_segment is updated but following frag_skbs are not updated.

A call path skb_mac_gso_segment -> inet_gso_segment ->
udp4_ufo_fragment -> __udp_gso_segment -> __udp_gso_segment_list
does not try to update UDP/IP header of the segment list but copy
only the MAC header.

Update port, addr and check of each skb of the segment list in
__udp_gso_segment_list. It covers both SNAT and DNAT.

Fixes: 9fd1ff5d2ac7 (udp: Support UDP fraglist GRO/GSO.)
Signed-off-by: Dongseok Yi <dseok.yi@samsung.com>
Acked-by: Steffen Klassert <steffen.klassert@secunet.com>
Link: https://lore.kernel.org/r/1611962007-80092-1-git-send-email-dseok.yi@samsung.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
include/net/udp.h
net/ipv4/udp_offload.c
net/ipv6/udp_offload.c