diff options
Diffstat (limited to 'net/ipv6/ip6_output.c')
| -rw-r--r-- | net/ipv6/ip6_output.c | 5 | 
1 files changed, 3 insertions, 2 deletions
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index dabf108ad81..75d5ef83009 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c @@ -37,6 +37,7 @@  #include <linux/tcp.h>  #include <linux/route.h>  #include <linux/module.h> +#include <linux/slab.h>  #include <linux/netfilter.h>  #include <linux/netfilter_ipv6.h> @@ -107,7 +108,7 @@ static int ip6_dev_loopback_xmit(struct sk_buff *newskb)  	newskb->ip_summed = CHECKSUM_UNNECESSARY;  	WARN_ON(!skb_dst(newskb)); -	netif_rx(newskb); +	netif_rx_ni(newskb);  	return 0;  } @@ -628,7 +629,7 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *))  	/* We must not fragment if the socket is set to force MTU discovery  	 * or if the skb it not generated by a local socket.  	 */ -	if (!skb->local_df) { +	if (!skb->local_df && skb->len > mtu) {  		skb->dev = skb_dst(skb)->dev;  		icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu);  		IP6_INC_STATS(net, ip6_dst_idev(skb_dst(skb)),  |