ipv6: allow to send packet after receiving ICMPv6 Too Big message with MTU field...
authorShan Wei <shanwei@cn.fujitsu.com>
Sun, 18 Apr 2010 16:58:22 +0000 (16:58 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 22 Apr 2010 05:48:26 +0000 (22:48 -0700)
commitf2228f785a9d97307aa8ba709088cfda6c3df73f
tree3440546af96613f8204221128609bf8054a8e733
parenta19259c3d589a014e5f47f148f74dfc44422c82b
ipv6: allow to send packet after receiving ICMPv6 Too Big message with MTU field less than IPV6_MIN_MTU

According to RFC2460, PMTU is set to the IPv6 Minimum Link
MTU (1280) and a fragment header should always be included
after a node receiving Too Big message reporting PMTU is
less than the IPv6 Minimum Link MTU.

After receiving a ICMPv6 Too Big message reporting PMTU is
less than the IPv6 Minimum Link MTU, sctp *can't* send any
data/control chunk that total length including IPv6 head
and IPv6 extend head is less than IPV6_MIN_MTU(1280 bytes).

The failure occured in p6_fragment(), about reason
see following(take SHUTDOWN chunk for example):
sctp_packet_transmit (SHUTDOWN chunk, len=16 byte)
|------sctp_v6_xmit (local_df=0)
   |------ip6_xmit
       |------ip6_output (dst_allfrag is ture)
           |------ip6_fragment

In ip6_fragment(), for local_df=0, drops the the packet
and returns EMSGSIZE.

The patch fixes it with adding check length of skb->len.
In this case, Ipv6 not to fragment upper protocol data,
just only add a fragment header before it.

Signed-off-by: Shan Wei <shanwei@cn.fujitsu.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/ip6_output.c