diff options
author | David S. Miller <davem@davemloft.net> | 2008-04-14 11:30:23 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-04-14 11:30:23 +0200 |
commit | df39e8ba56a788733d369068c7319e04b1da3cd5 (patch) | |
tree | 1e9be853bdb455e341cdbf957656f342cfa2eb9e /net/ipv4/icmp.c | |
parent | [SKB]: __skb_queue_tail = __skb_insert before (diff) | |
parent | [BRIDGE]: Fix crash in __ip_route_output_key with bridge netfilter (diff) | |
download | linux-df39e8ba56a788733d369068c7319e04b1da3cd5.tar.xz linux-df39e8ba56a788733d369068c7319e04b1da3cd5.zip |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts:
drivers/net/ehea/ehea_main.c
drivers/net/wireless/iwlwifi/Kconfig
drivers/net/wireless/rt2x00/rt61pci.c
net/ipv4/inet_timewait_sock.c
net/ipv6/raw.c
net/mac80211/ieee80211_sta.c
Diffstat (limited to 'net/ipv4/icmp.c')
-rw-r--r-- | net/ipv4/icmp.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c index efc7cbe759c9..3e14d9cd29b3 100644 --- a/net/ipv4/icmp.c +++ b/net/ipv4/icmp.c @@ -578,7 +578,7 @@ void icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info) } if (xfrm_decode_session_reverse(skb_in, &fl, AF_INET)) - goto ende; + goto relookup_failed; if (inet_addr_type(net, fl.fl4_src) == RTN_LOCAL) err = __ip_route_output_key(net, &rt2, &fl); @@ -588,7 +588,7 @@ void icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info) fl2.fl4_dst = fl.fl4_src; if (ip_route_output_key(net, &rt2, &fl2)) - goto ende; + goto relookup_failed; /* Ugh! */ odst = skb_in->dst; @@ -601,21 +601,23 @@ void icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info) } if (err) - goto ende; + goto relookup_failed; err = xfrm_lookup((struct dst_entry **)&rt2, &fl, NULL, XFRM_LOOKUP_ICMP); - if (err == -ENOENT) { + switch (err) { + case 0: + dst_release(&rt->u.dst); + rt = rt2; + break; + case -EPERM: + goto ende; + default: +relookup_failed: if (!rt) goto out_unlock; - goto route_done; + break; } - - dst_release(&rt->u.dst); - rt = rt2; - - if (err) - goto out_unlock; } route_done: |