From: Greg Kroah-Hartman Date: Fri, 11 Aug 2017 21:08:09 +0000 (-0700) Subject: 3.18-stable patches X-Git-Tag: v3.18.65~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c52cd0f814e2feb9fd5fa5d3f07aa2685869ac87;p=thirdparty%2Fkernel%2Fstable-queue.git 3.18-stable patches added patches: ipv4-should-use-consistent-conditional-judgement-for-ip-fragment-in-__ip_append_data-and-ip_finish_output.patch --- diff --git a/queue-3.18/ipv4-should-use-consistent-conditional-judgement-for-ip-fragment-in-__ip_append_data-and-ip_finish_output.patch b/queue-3.18/ipv4-should-use-consistent-conditional-judgement-for-ip-fragment-in-__ip_append_data-and-ip_finish_output.patch new file mode 100644 index 00000000000..3fe70bb6fca --- /dev/null +++ b/queue-3.18/ipv4-should-use-consistent-conditional-judgement-for-ip-fragment-in-__ip_append_data-and-ip_finish_output.patch @@ -0,0 +1,42 @@ +From 0a28cfd51e17f4f0a056bcf66bfbe492c3b99f38 Mon Sep 17 00:00:00 2001 +From: zheng li +Date: Mon, 12 Dec 2016 09:56:05 +0800 +Subject: ipv4: Should use consistent conditional judgement for ip fragment in __ip_append_data and ip_finish_output + +From: zheng li + +commit 0a28cfd51e17f4f0a056bcf66bfbe492c3b99f38 upstream. + +There is an inconsistent conditional judgement in __ip_append_data and +ip_finish_output functions, the variable length in __ip_append_data just +include the length of application's payload and udp header, don't include +the length of ip header, but in ip_finish_output use +(skb->len > ip_skb_dst_mtu(skb)) as judgement, and skb->len include the +length of ip header. + +That causes some particular application's udp payload whose length is +between (MTU - IP Header) and MTU were fragmented by ip_fragment even +though the rst->dev support UFO feature. + +Add the length of ip header to length in __ip_append_data to keep +consistent conditional judgement as ip_finish_output for ip fragment. + +Signed-off-by: Zheng Li +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + net/ipv4/ip_output.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/net/ipv4/ip_output.c ++++ b/net/ipv4/ip_output.c +@@ -889,7 +889,7 @@ static int __ip_append_data(struct sock + + cork->length += length; + if ((skb && skb_is_gso(skb)) || +- ((length > mtu) && ++ (((length + fragheaderlen) > mtu) && + (skb_queue_len(queue) <= 1) && + (sk->sk_protocol == IPPROTO_UDP) && + (rt->dst.dev->features & NETIF_F_UFO) && !rt->dst.header_len && diff --git a/queue-3.18/series b/queue-3.18/series index 63306f333f2..f02858257f8 100644 --- a/queue-3.18/series +++ b/queue-3.18/series @@ -6,3 +6,4 @@ net-avoid-skb_warn_bad_offload-false-positives-on-ufo.patch packet-fix-tp_reserve-race-in-packet_set_ring.patch revert-ipv4-should-use-consistent-conditional-judgement-for-ip-fragment-in-__ip_append_data-and-ip_finish_output.patch udp-consistently-apply-ufo-or-fragmentation.patch +ipv4-should-use-consistent-conditional-judgement-for-ip-fragment-in-__ip_append_data-and-ip_finish_output.patch