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) |
