diff options
Diffstat (limited to 'net/ipv4/icmp.c')
-rw-r--r-- | net/ipv4/icmp.c | 15 |
1 files changed, 1 insertions, 14 deletions
diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c index 82baea026484..13d74598d3e4 100644 --- a/net/ipv4/icmp.c +++ b/net/ipv4/icmp.c | |||
@@ -603,7 +603,6 @@ static void icmp_unreach(struct sk_buff *skb) | |||
603 | struct icmphdr *icmph; | 603 | struct icmphdr *icmph; |
604 | int hash, protocol; | 604 | int hash, protocol; |
605 | struct net_protocol *ipprot; | 605 | struct net_protocol *ipprot; |
606 | struct sock *raw_sk; | ||
607 | u32 info = 0; | 606 | u32 info = 0; |
608 | 607 | ||
609 | /* | 608 | /* |
@@ -697,21 +696,9 @@ static void icmp_unreach(struct sk_buff *skb) | |||
697 | /* | 696 | /* |
698 | * Deliver ICMP message to raw sockets. Pretty useless feature? | 697 | * Deliver ICMP message to raw sockets. Pretty useless feature? |
699 | */ | 698 | */ |
699 | raw_icmp_error(skb, protocol, info); | ||
700 | 700 | ||
701 | /* Note: See raw.c and net/raw.h, RAWV4_HTABLE_SIZE==MAX_INET_PROTOS */ | ||
702 | hash = protocol & (MAX_INET_PROTOS - 1); | 701 | hash = protocol & (MAX_INET_PROTOS - 1); |
703 | read_lock(&raw_v4_lock); | ||
704 | if ((raw_sk = sk_head(&raw_v4_htable[hash])) != NULL) { | ||
705 | while ((raw_sk = __raw_v4_lookup(raw_sk, protocol, iph->daddr, | ||
706 | iph->saddr, | ||
707 | skb->dev->ifindex)) != NULL) { | ||
708 | raw_err(raw_sk, skb, info); | ||
709 | raw_sk = sk_next(raw_sk); | ||
710 | iph = (struct iphdr *)skb->data; | ||
711 | } | ||
712 | } | ||
713 | read_unlock(&raw_v4_lock); | ||
714 | |||
715 | rcu_read_lock(); | 702 | rcu_read_lock(); |
716 | ipprot = rcu_dereference(inet_protos[hash]); | 703 | ipprot = rcu_dereference(inet_protos[hash]); |
717 | if (ipprot && ipprot->err_handler) | 704 | if (ipprot && ipprot->err_handler) |