tags 700234 + pending
thanks

Dear maintainer,

as requested, I've prepared an NMU for transmission (versioned as 
2.52-3+nmu1) and uploaded it to unstable.

Note that I haven’t commited the changes to git, because the repository 
includes not-yet-uploaded changes in the wheezy branch and I don’t know 
how you want to handle them.


Cheers,
-- 
 .''`.      Josselin Mouette
: :' :
`. `'
  `-
diff -Nru transmission-2.52/debian/changelog transmission-2.52/debian/changelog
--- transmission-2.52/debian/changelog	2012-07-31 13:26:49.000000000 +0200
+++ transmission-2.52/debian/changelog	2013-02-14 19:41:15.000000000 +0100
@@ -1,3 +1,12 @@
+transmission (2.52-3+nmu1) unstable; urgency=medium
+
+  * Non-maintainer upload with maintainer’s permission.
+  * CVE-2012-6129_libutp_crash.patch: SECURITY - backport upstream 
+    commit r13646 to fix a crasher that could be exploited remotely.
+  * Closes: #700234, CVE-2012-6129.
+
+ -- Josselin Mouette <j...@debian.org>  Thu, 14 Feb 2013 19:41:13 +0100
+
 transmission (2.52-3) unstable; urgency=high (fixes CVE-2012-4037)
 
   * [5b2ca219] backport fix to XSS in web client from 2.61 (CVE-2012-4037)
diff -Nru transmission-2.52/debian/patches/CVE-2012-6129_libutp_crash.patch transmission-2.52/debian/patches/CVE-2012-6129_libutp_crash.patch
--- transmission-2.52/debian/patches/CVE-2012-6129_libutp_crash.patch	1970-01-01 01:00:00.000000000 +0100
+++ transmission-2.52/debian/patches/CVE-2012-6129_libutp_crash.patch	2013-02-10 11:00:58.000000000 +0100
@@ -0,0 +1,44 @@
+Index: trunk/third-party/libutp/utp.cpp
+===================================================================
+--- trunk/third-party/libutp/utp.cpp	(revision 13645)
++++ trunk/third-party/libutp/utp.cpp	(revision 13646)
+@@ -1488,4 +1488,6 @@
+ }
+ 
++enum { MAX_EACK = 128 };
++
+ void UTPSocket::selective_ack(uint base, const byte *mask, byte len)
+ {
+@@ -1500,5 +1502,5 @@
+ 	// iterate in reverse over the acked packets, at the end, the top packets
+ 	// are the ones we want to resend
+-	int resends[32];
++	int resends[MAX_EACK];
+ 	int nr = 0;
+ 
+@@ -1573,4 +1575,10 @@
+ 			count >= DUPLICATE_ACKS_BEFORE_RESEND &&
+ 			duplicate_ack < DUPLICATE_ACKS_BEFORE_RESEND) {
++			// resends is a stack, and we're mostly interested in the top of it
++			// if we're full, just throw away the lower half
++			if (nr >= MAX_EACK - 2) {
++				memmove(resends, &resends[MAX_EACK/2], MAX_EACK/2 * sizeof(resends[0]));
++				nr -= MAX_EACK / 2;
++			}
+ 			resends[nr++] = v;
+ 			LOG_UTPV("0x%08x: no ack for %u", this, v);
+@@ -1581,11 +1589,10 @@
+ 	} while (--bits >= -1);
+ 
+-	if (((base - 1 - fast_resend_seq_nr) & ACK_NR_MASK) < 256 &&
+-		count >= DUPLICATE_ACKS_BEFORE_RESEND &&
+-		duplicate_ack < DUPLICATE_ACKS_BEFORE_RESEND) {
++	if (((base - 1 - fast_resend_seq_nr) & ACK_NR_MASK) <= OUTGOING_BUFFER_MAX_SIZE &&
++		count >= DUPLICATE_ACKS_BEFORE_RESEND) {
+ 		// if we get enough duplicate acks to start
+ 		// resending, the first packet we should resend
+ 		// is base-1
+-		resends[nr++] = base - 1;
++		resends[nr++] = (base - 1) & ACK_NR_MASK;
+ 	} else {
+ 		LOG_UTPV("0x%08x: not resending %u count:%d dup_ack:%u fast_resend_seq_nr:%u",
diff -Nru transmission-2.52/debian/patches/series transmission-2.52/debian/patches/series
--- transmission-2.52/debian/patches/series	2012-07-31 12:55:29.000000000 +0200
+++ transmission-2.52/debian/patches/series	2013-02-14 19:39:51.000000000 +0100
@@ -1,2 +1,3 @@
 fix_xss_web_client.patch
 fix_magnet_seed_status.patch
+CVE-2012-6129_libutp_crash.patch

Reply via email to