diff options
Diffstat (limited to 'net/ipv4/udp_offload.c')
-rw-r--r-- | net/ipv4/udp_offload.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/net/ipv4/udp_offload.c b/net/ipv4/udp_offload.c index f9386160cbee..2af7b7e1a0f6 100644 --- a/net/ipv4/udp_offload.c +++ b/net/ipv4/udp_offload.c | |||
@@ -339,8 +339,13 @@ unflush: | |||
339 | skb_gro_pull(skb, sizeof(struct udphdr)); /* pull encapsulating udp header */ | 339 | skb_gro_pull(skb, sizeof(struct udphdr)); /* pull encapsulating udp header */ |
340 | skb_gro_postpull_rcsum(skb, uh, sizeof(struct udphdr)); | 340 | skb_gro_postpull_rcsum(skb, uh, sizeof(struct udphdr)); |
341 | NAPI_GRO_CB(skb)->proto = uo_priv->offload->ipproto; | 341 | NAPI_GRO_CB(skb)->proto = uo_priv->offload->ipproto; |
342 | pp = uo_priv->offload->callbacks.gro_receive(head, skb, | 342 | |
343 | uo_priv->offload); | 343 | if (gro_recursion_inc_test(skb)) { |
344 | pp = NULL; | ||
345 | } else { | ||
346 | pp = uo_priv->offload->callbacks.gro_receive(head, skb, | ||
347 | uo_priv->offload); | ||
348 | } | ||
344 | 349 | ||
345 | out_unlock: | 350 | out_unlock: |
346 | rcu_read_unlock(); | 351 | rcu_read_unlock(); |