]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Remove (untriggerable) overflow in crypto_random_hostname()
authorStephen Palmateer <stephen.palmateer@gmail.com>
Wed, 21 Dec 2011 17:48:38 +0000 (12:48 -0500)
committerNick Mathewson <nickm@torproject.org>
Tue, 10 Jan 2012 00:05:05 +0000 (19:05 -0500)
Fixes bug 4413; bugfix on xxxx.

Hostname components cannot be larger than 63 characters.
This simple check makes certain randlen cannot overflow rand_bytes_len.

changes/bug4413 [new file with mode: 0644]
src/common/crypto.c

diff --git a/changes/bug4413 b/changes/bug4413
new file mode 100644 (file)
index 0000000..653ddeb
--- /dev/null
@@ -0,0 +1,2 @@
+Minor bugfixes:
+    - Check for a potential, however unlikely, integer overflow. Fixes bug 4413; Bugfix on 0.2.3.9-alpha.
index 673fc0cc1fa46ddc66c35b82caddd4b6c20fa395..9ee3d989a390fe63048c10d7d4596ccad75399f9 100644 (file)
@@ -82,6 +82,9 @@
 #include "sha256.c"
 #define SHA256_Final(a,b) sha256_done(b,a)
 
+/* Bug 4413*/
+#define MAX_HOSTNAME_SIZE 63
+
 static unsigned char *
 SHA256(const unsigned char *m, size_t len, unsigned char *d)
 {
@@ -2554,7 +2557,12 @@ crypto_random_hostname(int min_rand_len, int max_rand_len, const char *prefix,
   size_t resultlen, prefixlen;
 
   tor_assert(max_rand_len >= min_rand_len);
+
   randlen = min_rand_len + crypto_rand_int(max_rand_len - min_rand_len + 1);
+  if (randlen > MAX_HOSTNAME_SIZE) {
+    randlen = MAX_HOSTNAME_SIZE;
+  }
+
   prefixlen = strlen(prefix);
   resultlen = prefixlen + strlen(suffix) + randlen + 16;