| From foo@baz Sat Aug 18 11:54:51 CEST 2018 |
| From: Xin Long <lucien.xin@gmail.com> |
| Date: Sun, 5 Aug 2018 22:46:07 +0800 |
| Subject: ip6_tunnel: use the right value for ipv4 min mtu check in ip6_tnl_xmit |
| |
| From: Xin Long <lucien.xin@gmail.com> |
| |
| [ Upstream commit 82a40777de12728dedf4075453b694f0d1baee80 ] |
| |
| According to RFC791, 68 bytes is the minimum size of IPv4 datagram every |
| device must be able to forward without further fragmentation while 576 |
| bytes is the minimum size of IPv4 datagram every device has to be able |
| to receive, so in ip6_tnl_xmit(), 68(IPV4_MIN_MTU) should be the right |
| value for the ipv4 min mtu check in ip6_tnl_xmit. |
| |
| While at it, change to use max() instead of if statement. |
| |
| Fixes: c9fefa08190f ("ip6_tunnel: get the min mtu properly in ip6_tnl_xmit") |
| Reported-by: Sabrina Dubroca <sd@queasysnail.net> |
| Signed-off-by: Xin Long <lucien.xin@gmail.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/ipv6/ip6_tunnel.c | 8 ++------ |
| 1 file changed, 2 insertions(+), 6 deletions(-) |
| |
| --- a/net/ipv6/ip6_tunnel.c |
| +++ b/net/ipv6/ip6_tunnel.c |
| @@ -1133,12 +1133,8 @@ route_lookup: |
| max_headroom += 8; |
| mtu -= 8; |
| } |
| - if (skb->protocol == htons(ETH_P_IPV6)) { |
| - if (mtu < IPV6_MIN_MTU) |
| - mtu = IPV6_MIN_MTU; |
| - } else if (mtu < 576) { |
| - mtu = 576; |
| - } |
| + mtu = max(mtu, skb->protocol == htons(ETH_P_IPV6) ? |
| + IPV6_MIN_MTU : IPV4_MIN_MTU); |
| |
| if (skb_dst(skb) && !t->parms.collect_md) |
| skb_dst(skb)->ops->update_pmtu(skb_dst(skb), NULL, skb, mtu); |