currently, UDP packets with zero checksum are not allowed to use udp offload's GRO. This patch admits such packets to GRO, if the related socket settings allow it: ipv6 packets are not admitted if the sockets don't have the no_check6_rx flag set.
Signed-off-by: Paolo Abeni <pab...@redhat.com> --- net/ipv4/udp_offload.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/net/ipv4/udp_offload.c b/net/ipv4/udp_offload.c index 9c37338..ac783f4 100644 --- a/net/ipv4/udp_offload.c +++ b/net/ipv4/udp_offload.c @@ -257,7 +257,7 @@ struct sk_buff **udp_gro_receive(struct sk_buff **head, struct sk_buff *skb, struct sock *sk; if (NAPI_GRO_CB(skb)->encap_mark || - (skb->ip_summed != CHECKSUM_PARTIAL && + (uh->check && skb->ip_summed != CHECKSUM_PARTIAL && NAPI_GRO_CB(skb)->csum_cnt == 0 && !NAPI_GRO_CB(skb)->csum_valid)) goto out; @@ -271,6 +271,10 @@ struct sk_buff **udp_gro_receive(struct sk_buff **head, struct sk_buff *skb, if (!sk || !udp_sk(sk)->gro_receive) goto out_unlock; + if (!uh->check && skb->protocol == cpu_to_be16(ETH_P_IPV6) && + !udp_sk(sk)->no_check6_rx) + goto out_unlock; + flush = 0; for (p = *head; p; p = p->next) { -- 1.8.3.1