diff options
-rw-r--r-- | net/ipv4/ip_forward.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/net/ipv4/ip_forward.c b/net/ipv4/ip_forward.c index 467ebedb99ba..61b30d100676 100644 --- a/net/ipv4/ip_forward.c +++ b/net/ipv4/ip_forward.c | |||
@@ -85,6 +85,14 @@ int ip_forward(struct sk_buff *skb) | |||
85 | if (opt->is_strictroute && rt->rt_dst != rt->rt_gateway) | 85 | if (opt->is_strictroute && rt->rt_dst != rt->rt_gateway) |
86 | goto sr_failed; | 86 | goto sr_failed; |
87 | 87 | ||
88 | if (unlikely(skb->len > dst_mtu(&rt->u.dst) && | ||
89 | (ip_hdr(skb)->frag_off & htons(IP_DF))) && !skb->local_df) { | ||
90 | IP_INC_STATS(IPSTATS_MIB_FRAGFAILS); | ||
91 | icmp_send(skb, ICMP_DEST_UNREACH, ICMP_FRAG_NEEDED, | ||
92 | htonl(dst_mtu(&rt->u.dst))); | ||
93 | goto drop; | ||
94 | } | ||
95 | |||
88 | /* We are about to mangle packet. Copy it! */ | 96 | /* We are about to mangle packet. Copy it! */ |
89 | if (skb_cow(skb, LL_RESERVED_SPACE(rt->u.dst.dev)+rt->u.dst.header_len)) | 97 | if (skb_cow(skb, LL_RESERVED_SPACE(rt->u.dst.dev)+rt->u.dst.header_len)) |
90 | goto drop; | 98 | goto drop; |