diff options
Diffstat (limited to 'net/ipv4/icmp.c')
-rw-r--r-- | net/ipv4/icmp.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c index 42b7bcf8045b..ea7d4afe8205 100644 --- a/net/ipv4/icmp.c +++ b/net/ipv4/icmp.c | |||
@@ -663,16 +663,16 @@ static void icmp_socket_deliver(struct sk_buff *skb, u32 info) | |||
663 | /* Checkin full IP header plus 8 bytes of protocol to | 663 | /* Checkin full IP header plus 8 bytes of protocol to |
664 | * avoid additional coding at protocol handlers. | 664 | * avoid additional coding at protocol handlers. |
665 | */ | 665 | */ |
666 | if (!pskb_may_pull(skb, iph->ihl * 4 + 8)) | 666 | if (!pskb_may_pull(skb, iph->ihl * 4 + 8)) { |
667 | ICMP_INC_STATS_BH(dev_net(skb->dev), ICMP_MIB_INERRORS); | ||
667 | return; | 668 | return; |
669 | } | ||
668 | 670 | ||
669 | raw_icmp_error(skb, protocol, info); | 671 | raw_icmp_error(skb, protocol, info); |
670 | 672 | ||
671 | rcu_read_lock(); | ||
672 | ipprot = rcu_dereference(inet_protos[protocol]); | 673 | ipprot = rcu_dereference(inet_protos[protocol]); |
673 | if (ipprot && ipprot->err_handler) | 674 | if (ipprot && ipprot->err_handler) |
674 | ipprot->err_handler(skb, info); | 675 | ipprot->err_handler(skb, info); |
675 | rcu_read_unlock(); | ||
676 | } | 676 | } |
677 | 677 | ||
678 | static bool icmp_tag_validation(int proto) | 678 | static bool icmp_tag_validation(int proto) |