| From 7e76a2052e5ec51bd94e05ba76f47729af9ef937 Mon Sep 17 00:00:00 2001 |
| From: Jiri Pirko <jiri@resnulli.us> |
| Date: Wed, 6 Nov 2013 17:52:19 +0100 |
| Subject: ip6_output: fragment outgoing reassembled skb properly |
| |
| From: Jiri Pirko <jiri@resnulli.us> |
| |
| [ Upstream commit 9037c3579a277f3a23ba476664629fda8c35f7c4 ] |
| |
| If reassembled packet would fit into outdev MTU, it is not fragmented |
| according the original frag size and it is send as single big packet. |
| |
| The second case is if skb is gso. In that case fragmentation does not happen |
| according to the original frag size. |
| |
| This patch fixes these. |
| |
| Signed-off-by: Jiri Pirko <jiri@resnulli.us> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/ipv6/ip6_output.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/net/ipv6/ip6_output.c |
| +++ b/net/ipv6/ip6_output.c |
| @@ -150,7 +150,8 @@ static int ip6_finish_output2(struct sk_ |
| static int ip6_finish_output(struct sk_buff *skb) |
| { |
| if ((skb->len > ip6_skb_dst_mtu(skb) && !skb_is_gso(skb)) || |
| - dst_allfrag(skb_dst(skb))) |
| + dst_allfrag(skb_dst(skb)) || |
| + (IP6CB(skb)->frag_max_size && skb->len > IP6CB(skb)->frag_max_size)) |
| return ip6_fragment(skb, ip6_finish_output2); |
| else |
| return ip6_finish_output2(skb); |