Commit b5c15fc0 authored by Herbert Xu's avatar Herbert Xu Committed by David S. Miller

[IPV6]: Fix reversed local_df test in ip6_fragment

I managed to reverse the local_df test when forward-porting this
patch so it actually makes things worse by never fragmenting at
all.

Thanks to David Stevens for testing and reporting this bug.

Bill Fink pointed out that the local_df setting is also the wrong
way around.
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 073a3719
...@@ -621,7 +621,7 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *)) ...@@ -621,7 +621,7 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *))
* or if the skb it not generated by a local socket. (This last * or if the skb it not generated by a local socket. (This last
* check should be redundant, but it's free.) * check should be redundant, but it's free.)
*/ */
if (skb->local_df) { if (!skb->local_df) {
skb->dev = skb->dst->dev; skb->dev = skb->dst->dev;
icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu, skb->dev); icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu, skb->dev);
IP6_INC_STATS(ip6_dst_idev(skb->dst), IPSTATS_MIB_FRAGFAILS); IP6_INC_STATS(ip6_dst_idev(skb->dst), IPSTATS_MIB_FRAGFAILS);
...@@ -1421,7 +1421,7 @@ int ip6_push_pending_frames(struct sock *sk) ...@@ -1421,7 +1421,7 @@ int ip6_push_pending_frames(struct sock *sk)
} }
/* Allow local fragmentation. */ /* Allow local fragmentation. */
if (np->pmtudisc >= IPV6_PMTUDISC_DO) if (np->pmtudisc < IPV6_PMTUDISC_DO)
skb->local_df = 1; skb->local_df = 1;
ipv6_addr_copy(final_dst, &fl->fl6_dst); ipv6_addr_copy(final_dst, &fl->fl6_dst);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment