[kernel] r19343 - in dists/squeeze/linux-2.6/debian: . patches/bugfix/all patches/series

Ben Hutchings benh at alioth.debian.org
Mon Aug 20 01:41:09 UTC 2012


Author: benh
Date: Mon Aug 20 01:41:02 2012
New Revision: 19343

Log:
tcp: Don't change unlocked socket state in tcp_v4_err(). (Closes: #685087)

Added:
   dists/squeeze/linux-2.6/debian/patches/bugfix/all/tcp-Don-t-change-unlocked-socket-state-in-tcp_v4_err.patch
Modified:
   dists/squeeze/linux-2.6/debian/changelog
   dists/squeeze/linux-2.6/debian/patches/series/46

Modified: dists/squeeze/linux-2.6/debian/changelog
==============================================================================
--- dists/squeeze/linux-2.6/debian/changelog	Mon Aug 20 00:35:55 2012	(r19342)
+++ dists/squeeze/linux-2.6/debian/changelog	Mon Aug 20 01:41:02 2012	(r19343)
@@ -22,6 +22,7 @@
       (Closes: #575893)
     - drm: mm: fix range restricted allocations (regression in 2.6.32-36)
     - drm/i915: no lvds quirk for AOpen MP45
+  * tcp: Don't change unlocked socket state in tcp_v4_err(). (Closes: #685087)
 
   [ Jonathan Nieder ]
   * ath5k: initialize default noise floor

Added: dists/squeeze/linux-2.6/debian/patches/bugfix/all/tcp-Don-t-change-unlocked-socket-state-in-tcp_v4_err.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/squeeze/linux-2.6/debian/patches/bugfix/all/tcp-Don-t-change-unlocked-socket-state-in-tcp_v4_err.patch	Mon Aug 20 01:41:02 2012	(r19343)
@@ -0,0 +1,53 @@
+From: "David S. Miller" <davem at davemloft.net>
+Date: Fri, 12 Nov 2010 13:35:00 -0800
+Subject: [PATCH] tcp: Don't change unlocked socket state in tcp_v4_err().
+
+commit 8f49c2703b33519aaaccc63f571b465b9d2b3a2d upstream.
+
+Alexey Kuznetsov noticed a regression introduced by
+commit f1ecd5d9e7366609d640ff4040304ea197fbc618
+("Revert Backoff [v3]: Revert RTO on ICMP destination unreachable")
+
+The RTO and timer modification code added to tcp_v4_err()
+doesn't check sock_owned_by_user(), which if true means we
+don't have exclusive access to the socket and therefore cannot
+modify it's critical state.
+
+Just skip this new code block if sock_owned_by_user() is true
+and eliminate the now superfluous sock_owned_by_user() code
+block contained within.
+
+Reported-by: Alexey Kuznetsov <kuznet at ms2.inr.ac.ru>
+Signed-off-by: David S. Miller <davem at davemloft.net>
+CC: Damian Lukowski <damian at tvk.rwth-aachen.de>
+Acked-by: Eric Dumazet <eric.dumazet at gmail.com>
+---
+ net/ipv4/tcp_ipv4.c |    8 +++-----
+ 1 file changed, 3 insertions(+), 5 deletions(-)
+
+diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
+index 8f8527d..69ccbc1 100644
+--- a/net/ipv4/tcp_ipv4.c
++++ b/net/ipv4/tcp_ipv4.c
+@@ -415,6 +415,9 @@ void tcp_v4_err(struct sk_buff *icmp_skb, u32 info)
+ 		    !icsk->icsk_backoff)
+ 			break;
+ 
++		if (sock_owned_by_user(sk))
++			break;
++
+ 		icsk->icsk_backoff--;
+ 		inet_csk(sk)->icsk_rto = __tcp_set_rto(tp) <<
+ 					 icsk->icsk_backoff;
+@@ -429,11 +432,6 @@ void tcp_v4_err(struct sk_buff *icmp_skb, u32 info)
+ 		if (remaining) {
+ 			inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS,
+ 						  remaining, TCP_RTO_MAX);
+-		} else if (sock_owned_by_user(sk)) {
+-			/* RTO revert clocked out retransmission,
+-			 * but socket is locked. Will defer. */
+-			inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS,
+-						  HZ/20, TCP_RTO_MAX);
+ 		} else {
+ 			/* RTO revert clocked out retransmission.
+ 			 * Will retransmit now */

Modified: dists/squeeze/linux-2.6/debian/patches/series/46
==============================================================================
--- dists/squeeze/linux-2.6/debian/patches/series/46	Mon Aug 20 00:35:55 2012	(r19342)
+++ dists/squeeze/linux-2.6/debian/patches/series/46	Mon Aug 20 01:41:02 2012	(r19343)
@@ -18,3 +18,4 @@
 + bugfix/x86/drm-i915-Fix-TV-Out-refresh-rate.patch
 + bugfix/x86/drm-i915-no-lvds-quirk-for-AOpen-MP45.patch
 + bugfix/all/drm-radeon-kms-fix-MSI-re-arm-on-rv370.patch
++ bugfix/all/tcp-Don-t-change-unlocked-socket-state-in-tcp_v4_err.patch



More information about the Kernel-svn-changes mailing list