<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux/net/ipv4, branch v3.4.52</title>
<subtitle>Linux kernel source tree</subtitle>
<id>https://git.amat.us/linux/atom/net/ipv4?h=v3.4.52</id>
<link rel='self' href='https://git.amat.us/linux/atom/net/ipv4?h=v3.4.52'/>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/'/>
<updated>2013-06-27T18:27:32Z</updated>
<entry>
<title>ip_tunnel: fix kernel panic with icmp_dest_unreach</title>
<updated>2013-06-27T18:27:32Z</updated>
<author>
<name>Eric Dumazet</name>
<email>edumazet@google.com</email>
</author>
<published>2013-05-24T05:49:58Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=3c353df4ca0f8f6912e103ca6d8d593ff4563b68'/>
<id>urn:sha1:3c353df4ca0f8f6912e103ca6d8d593ff4563b68</id>
<content type='text'>
[ Upstream commit a622260254ee481747cceaaa8609985b29a31565 ]

Daniel Petre reported crashes in icmp_dst_unreach() with following call
graph:

Daniel found a similar problem mentioned in
 http://lkml.indiana.edu/hypermail/linux/kernel/1007.0/00961.html

And indeed this is the root cause : skb-&gt;cb[] contains data fooling IP
stack.

We must clear IPCB in ip_tunnel_xmit() sooner in case dst_link_failure()
is called. Or else skb-&gt;cb[] might contain garbage from GSO segmentation
layer.

A similar fix was tested on linux-3.9, but gre code was refactored in
linux-3.10. I'll send patches for stable kernels as well.

Many thanks to Daniel for providing reports, patches and testing !

Reported-by: Daniel Petre &lt;daniel.petre@rcs-rds.ro&gt;
Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>tcp: xps: fix reordering issues</title>
<updated>2013-06-27T18:27:32Z</updated>
<author>
<name>Eric Dumazet</name>
<email>edumazet@google.com</email>
</author>
<published>2013-05-23T07:44:20Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=fa17eb7500ff1857fba3a01846e32c599cd332c3'/>
<id>urn:sha1:fa17eb7500ff1857fba3a01846e32c599cd332c3</id>
<content type='text'>
[ Upstream commit 547669d483e5783d722772af1483fa474da7caf9 ]

commit 3853b5841c01a ("xps: Improvements in TX queue selection")
introduced ooo_okay flag, but the condition to set it is slightly wrong.

In our traces, we have seen ACK packets being received out of order,
and RST packets sent in response.

We should test if we have any packets still in host queue.

Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Cc: Tom Herbert &lt;therbert@google.com&gt;
Cc: Yuchung Cheng &lt;ycheng@google.com&gt;
Cc: Neal Cardwell &lt;ncardwell@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>tcp: bug fix in proportional rate reduction.</title>
<updated>2013-06-27T18:27:31Z</updated>
<author>
<name>Nandita Dukkipati</name>
<email>nanditad@google.com</email>
</author>
<published>2013-05-21T15:12:07Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=2d73733f3539c18e09345a0988c44a23a75b42f3'/>
<id>urn:sha1:2d73733f3539c18e09345a0988c44a23a75b42f3</id>
<content type='text'>
[ Upstream commit 35f079ebbc860dcd1cca70890c9c8d59c1145525 ]

This patch is a fix for a bug triggering newly_acked_sacked &lt; 0
in tcp_ack(.).

The bug is triggered by sacked_out decreasing relative to prior_sacked,
but packets_out remaining the same as pior_packets. This is because the
snapshot of prior_packets is taken after tcp_sacktag_write_queue() while
prior_sacked is captured before tcp_sacktag_write_queue(). The problem
is: tcp_sacktag_write_queue (tcp_match_skb_to_sack() -&gt; tcp_fragment)
adjusts the pcount for packets_out and sacked_out (MSS change or other
reason). As a result, this delta in pcount is reflected in
(prior_sacked - sacked_out) but not in (prior_packets - packets_out).

This patch does the following:
1) initializes prior_packets at the start of tcp_ack() so as to
capture the delta in packets_out created by tcp_fragment.
2) introduces a new "previous_packets_out" variable that snapshots
packets_out right before tcp_clean_rtx_queue, so pkts_acked can be
correctly computed as before.
3) Computes pkts_acked using previous_packets_out, and computes
newly_acked_sacked using prior_packets.

Signed-off-by: Nandita Dukkipati &lt;nanditad@google.com&gt;
Acked-by: Yuchung Cheng &lt;ycheng@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>tcp: fix tcp_md5_hash_skb_data()</title>
<updated>2013-06-27T18:27:30Z</updated>
<author>
<name>Eric Dumazet</name>
<email>edumazet@google.com</email>
</author>
<published>2013-05-13T21:25:52Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=d193887e46642b1b210bdf0a6bf29af82b519c89'/>
<id>urn:sha1:d193887e46642b1b210bdf0a6bf29af82b519c89</id>
<content type='text'>
[ Upstream commit 54d27fcb338bd9c42d1dfc5a39e18f6f9d373c2e ]

TCP md5 communications fail [1] for some devices, because sg/crypto code
assume page offsets are below PAGE_SIZE.

This was discovered using mlx4 driver [2], but I suspect loopback
might trigger the same bug now we use order-3 pages in tcp_sendmsg()

[1] Failure is giving following messages.

huh, entered softirq 3 NET_RX ffffffff806ad230 preempt_count 00000100,
exited with 00000101?

[2] mlx4 driver uses order-2 pages to allocate RX frags

Reported-by: Matt Schnall &lt;mischnal@google.com&gt;
Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Cc: Bernhard Beck &lt;bbeck@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>net: drop dst before queueing fragments</title>
<updated>2013-05-01T16:41:20Z</updated>
<author>
<name>Eric Dumazet</name>
<email>edumazet@google.com</email>
</author>
<published>2013-04-16T12:55:41Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=1d0dd1db15bc5dedc25bcdebf3dd382436f11f8a'/>
<id>urn:sha1:1d0dd1db15bc5dedc25bcdebf3dd382436f11f8a</id>
<content type='text'>
[ Upstream commit 97599dc792b45b1669c3cdb9a4b365aad0232f65 ]

Commit 4a94445c9a5c (net: Use ip_route_input_noref() in input path)
added a bug in IP defragmentation handling, as non refcounted
dst could escape an RCU protected section.

Commit 64f3b9e203bd068 (net: ip_expire() must revalidate route) fixed
the case of timeouts, but not the general problem.

Tom Parkin noticed crashes in UDP stack and provided a patch,
but further analysis permitted us to pinpoint the root cause.

Before queueing a packet into a frag list, we must drop its dst,
as this dst has limited lifetime (RCU protected)

When/if a packet is finally reassembled, we use the dst of the very
last skb, still protected by RCU and valid, as the dst of the
reassembled packet.

Use same logic in IPv6, as there is no need to hold dst references.

Reported-by: Tom Parkin &lt;tparkin@katalix.com&gt;
Tested-by: Tom Parkin &lt;tparkin@katalix.com&gt;
Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>tcp: call tcp_replace_ts_recent() from tcp_ack()</title>
<updated>2013-05-01T16:41:08Z</updated>
<author>
<name>Eric Dumazet</name>
<email>edumazet@google.com</email>
</author>
<published>2013-04-19T07:19:48Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=7575f50ffc847587909648242efdfd0951eb27b9'/>
<id>urn:sha1:7575f50ffc847587909648242efdfd0951eb27b9</id>
<content type='text'>
[ Upstream commit 12fb3dd9dc3c64ba7d64cec977cca9b5fb7b1d4e ]

commit bd090dfc634d (tcp: tcp_replace_ts_recent() should not be called
from tcp_validate_incoming()) introduced a TS ecr bug in slow path
processing.

1 A &gt; B P. 1:10001(10000) ack 1 &lt;nop,nop,TS val 1001 ecr 200&gt;
2 B &lt; A . 1:1(0) ack 1 win 257 &lt;sack 9001:10001,TS val 300 ecr 1001&gt;
3 A &gt; B . 1:1001(1000) ack 1 win 227 &lt;nop,nop,TS val 1002 ecr 200&gt;
4 A &gt; B . 1001:2001(1000) ack 1 win 227 &lt;nop,nop,TS val 1002 ecr 200&gt;

(ecr 200 should be ecr 300 in packets 3 &amp; 4)

Problem is tcp_ack() can trigger send of new packets (retransmits),
reflecting the prior TSval, instead of the TSval contained in the
currently processed incoming packet.

Fix this by calling tcp_replace_ts_recent() from tcp_ack() after the
checks, but before the actions.

Reported-by: Yuchung Cheng &lt;ycheng@google.com&gt;
Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Cc: Neal Cardwell &lt;ncardwell@google.com&gt;
Acked-by: Neal Cardwell &lt;ncardwell@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>esp4: fix error return code in esp_output()</title>
<updated>2013-05-01T16:41:07Z</updated>
<author>
<name>Wei Yongjun</name>
<email>yongjun_wei@trendmicro.com.cn</email>
</author>
<published>2013-04-13T15:49:03Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=d768ca1b9fae5c2ee68ad39e6b1b5e9fc23ca9bf'/>
<id>urn:sha1:d768ca1b9fae5c2ee68ad39e6b1b5e9fc23ca9bf</id>
<content type='text'>
[ Upstream commit 06848c10f720cbc20e3b784c0df24930b7304b93 ]

Fix to return a negative error code from the error handling
case instead of 0, as returned elsewhere in this function.

Signed-off-by: Wei Yongjun &lt;yongjun_wei@trendmicro.com.cn&gt;
Acked-by: Steffen Klassert &lt;steffen.klassert@secunet.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>tcp: Reallocate headroom if it would overflow csum_start</title>
<updated>2013-05-01T16:41:07Z</updated>
<author>
<name>Thomas Graf</name>
<email>tgraf@suug.ch</email>
</author>
<published>2013-04-11T10:57:18Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=ca6ad5d7758a96ef3cea419efe39b3281a5017b5'/>
<id>urn:sha1:ca6ad5d7758a96ef3cea419efe39b3281a5017b5</id>
<content type='text'>
[ Upstream commit 50bceae9bd3569d56744882f3012734d48a1d413 ]

If a TCP retransmission gets partially ACKed and collapsed multiple
times it is possible for the headroom to grow beyond 64K which will
overflow the 16bit skb-&gt;csum_start which is based on the start of
the headroom. It has been observed rarely in the wild with IPoIB due
to the 64K MTU.

Verify if the acking and collapsing resulted in a headroom exceeding
what csum_start can cover and reallocate the headroom if so.

A big thank you to Jim Foraker &lt;foraker1@llnl.gov&gt; and the team at
LLNL for helping out with the investigation and testing.

Reported-by: Jim Foraker &lt;foraker1@llnl.gov&gt;
Signed-off-by: Thomas Graf &lt;tgraf@suug.ch&gt;
Acked-by: Eric Dumazet &lt;edumazet@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>tcp: incoming connections might use wrong route under synflood</title>
<updated>2013-05-01T16:41:07Z</updated>
<author>
<name>Dmitry Popov</name>
<email>dp@highloadlab.com</email>
</author>
<published>2013-04-11T08:55:07Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=d0d7ee05a623ba00e4ffc4a07e67c6649cac5cae'/>
<id>urn:sha1:d0d7ee05a623ba00e4ffc4a07e67c6649cac5cae</id>
<content type='text'>
[ Upstream commit d66954a066158781ccf9c13c91d0316970fe57b6 ]

There is a bug in cookie_v4_check (net/ipv4/syncookies.c):
	flowi4_init_output(&amp;fl4, 0, sk-&gt;sk_mark, RT_CONN_FLAGS(sk),
			   RT_SCOPE_UNIVERSE, IPPROTO_TCP,
			   inet_sk_flowi_flags(sk),
			   (opt &amp;&amp; opt-&gt;srr) ? opt-&gt;faddr : ireq-&gt;rmt_addr,
			   ireq-&gt;loc_addr, th-&gt;source, th-&gt;dest);

Here we do not respect sk-&gt;sk_bound_dev_if, therefore wrong dst_entry may be
taken. This dst_entry is used by new socket (get_cookie_sock -&gt;
tcp_v4_syn_recv_sock), so its packets may take the wrong path.

Signed-off-by: Dmitry Popov &lt;dp@highloadlab.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>tcp: undo spurious timeout after SACK reneging</title>
<updated>2013-04-05T17:04:38Z</updated>
<author>
<name>Yuchung Cheng</name>
<email>ycheng@google.com</email>
</author>
<published>2013-03-24T10:42:25Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=d1f60c6d91df21978218af4f5442993749ecbf7e'/>
<id>urn:sha1:d1f60c6d91df21978218af4f5442993749ecbf7e</id>
<content type='text'>
[ Upstream commit 7ebe183c6d444ef5587d803b64a1f4734b18c564 ]

On SACK reneging the sender immediately retransmits and forces a
timeout but disables Eifel (undo). If the (buggy) receiver does not
drop any packet this can trigger a false slow-start retransmit storm
driven by the ACKs of the original packets. This can be detected with
undo and TCP timestamps.

Signed-off-by: Yuchung Cheng &lt;ycheng@google.com&gt;
Acked-by: Neal Cardwell &lt;ncardwell@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
</feed>
