diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2008-02-12 21:07:27 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-02-12 21:07:27 -0500 |
commit | 28a89453b1e8de8d777ad96fa1eef27b5d1ce074 (patch) | |
tree | 3dd9cc9d9c402f1191df99937897e150f3d4e724 /net/ipv6/xfrm6_output.c | |
parent | 69cc64d8d92bf852f933e90c888dfff083bd4fc9 (diff) |
[IPV6]: Fix IPsec datagram fragmentation
This is a long-standing bug in the IPsec IPv6 code that breaks
when we emit a IPsec tunnel-mode datagram packet. The problem
is that the code the emits the packet assumes the IPv6 stack
will fragment it later, but the IPv6 stack assumes that whoever
is emitting the packet is going to pre-fragment the packet.
In the long term we need to fix both sides, e.g., to get the
datagram code to pre-fragment as well as to get the IPv6 stack
to fragment locally generated tunnel-mode packet.
For now this patch does the second part which should make it
work for the IPsec host case.
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6/xfrm6_output.c')
-rw-r--r-- | net/ipv6/xfrm6_output.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/ipv6/xfrm6_output.c b/net/ipv6/xfrm6_output.c index b34c58c65656..79ccfb080733 100644 --- a/net/ipv6/xfrm6_output.c +++ b/net/ipv6/xfrm6_output.c | |||
@@ -36,7 +36,7 @@ static int xfrm6_tunnel_check_size(struct sk_buff *skb) | |||
36 | if (mtu < IPV6_MIN_MTU) | 36 | if (mtu < IPV6_MIN_MTU) |
37 | mtu = IPV6_MIN_MTU; | 37 | mtu = IPV6_MIN_MTU; |
38 | 38 | ||
39 | if (skb->len > mtu) { | 39 | if (!skb->local_df && skb->len > mtu) { |
40 | skb->dev = dst->dev; | 40 | skb->dev = dst->dev; |
41 | icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu, skb->dev); | 41 | icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu, skb->dev); |
42 | ret = -EMSGSIZE; | 42 | ret = -EMSGSIZE; |