diff options
Diffstat (limited to 'net/ipv4/route.c')
-rw-r--r-- | net/ipv4/route.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/net/ipv4/route.c b/net/ipv4/route.c index a78540f28276..f45f2a12f37b 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c | |||
@@ -902,6 +902,10 @@ static int ip_error(struct sk_buff *skb) | |||
902 | bool send; | 902 | bool send; |
903 | int code; | 903 | int code; |
904 | 904 | ||
905 | /* IP on this device is disabled. */ | ||
906 | if (!in_dev) | ||
907 | goto out; | ||
908 | |||
905 | net = dev_net(rt->dst.dev); | 909 | net = dev_net(rt->dst.dev); |
906 | if (!IN_DEV_FORWARD(in_dev)) { | 910 | if (!IN_DEV_FORWARD(in_dev)) { |
907 | switch (rt->dst.error) { | 911 | switch (rt->dst.error) { |
@@ -962,10 +966,7 @@ static void __ip_rt_update_pmtu(struct rtable *rt, struct flowi4 *fl4, u32 mtu) | |||
962 | if (dst_metric_locked(dst, RTAX_MTU)) | 966 | if (dst_metric_locked(dst, RTAX_MTU)) |
963 | return; | 967 | return; |
964 | 968 | ||
965 | if (dst->dev->mtu < mtu) | 969 | if (ipv4_mtu(dst) < mtu) |
966 | return; | ||
967 | |||
968 | if (rt->rt_pmtu && rt->rt_pmtu < mtu) | ||
969 | return; | 970 | return; |
970 | 971 | ||
971 | if (mtu < ip_rt_min_pmtu) | 972 | if (mtu < ip_rt_min_pmtu) |