aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/icmp.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-06-04 16:26:49 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-06-04 16:26:49 -0400
commit45efebf2492187e8915e2876c5bf6f3803b1c23f (patch)
treefef7ca620be5a61a243e7781bf50cb829972e4ca /net/ipv4/icmp.c
parent4acbab84688bfea82322c14e809fc7d82242cee3 (diff)
parent6e1d91039becc9d5bcd046d8c709dbaf471220e3 (diff)
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
* 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6: [ICMP]: Fix icmp_errors_use_inbound_ifaddr sysctl [IPV4]: Fix "ipOutNoRoutes" counter error for TCP and UDP [NET] gso: Fix GSO feature mask in sk_setup_caps [TCP]: Fix GSO ignorance of pkts_acked arg (cong.cntrl modules) [NET]: Fix comparisons of unsigned < 0. [NET]: Make net watchdog timers 1 sec jiffy aligned. [ATM]: Fix warning. [TCP]: Use default 32768-61000 outgoing port range in all cases. [AF_UNIX]: Fix datagram connect race causing an OOPS. [TG3]: Fix link problem on Dell's onboard 5906. [AF_UNIX]: Make socket locking much less confusing.
Diffstat (limited to 'net/ipv4/icmp.c')
-rw-r--r--net/ipv4/icmp.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c
index e238b17f554c..02a899bec196 100644
--- a/net/ipv4/icmp.c
+++ b/net/ipv4/icmp.c
@@ -514,12 +514,15 @@ void icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info)
514 514
515 saddr = iph->daddr; 515 saddr = iph->daddr;
516 if (!(rt->rt_flags & RTCF_LOCAL)) { 516 if (!(rt->rt_flags & RTCF_LOCAL)) {
517 /* This is broken, skb_in->dev points to the outgoing device 517 struct net_device *dev = NULL;
518 * after the packet passes through ip_output(). 518
519 */ 519 if (rt->fl.iif && sysctl_icmp_errors_use_inbound_ifaddr)
520 if (skb_in->dev && sysctl_icmp_errors_use_inbound_ifaddr) 520 dev = dev_get_by_index(rt->fl.iif);
521 saddr = inet_select_addr(skb_in->dev, 0, RT_SCOPE_LINK); 521
522 else 522 if (dev) {
523 saddr = inet_select_addr(dev, 0, RT_SCOPE_LINK);
524 dev_put(dev);
525 } else
523 saddr = 0; 526 saddr = 0;
524 } 527 }
525 528