]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Fix from rovv: when adding a detached signature, do not automatically assume it is...
authorNick Mathewson <nickm@torproject.org>
Tue, 11 Nov 2008 16:35:46 +0000 (16:35 +0000)
committerNick Mathewson <nickm@torproject.org>
Tue, 11 Nov 2008 16:35:46 +0000 (16:35 +0000)
svn:r17248

ChangeLog
src/or/dirvote.c

index 04479234a1af8b8b0b4df3a0e5a5e4604d1d9461..0c48c52b0afaf82b32e3e8d525c56df24028f7bb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,8 @@
 Changes in version 0.2.1.8-alpha - 2008-??-??
+  o Major bugfixes:
+    - Fix a DOS opportunity during the voting signature collection process
+      at directory authorities. Spotted by rovv. Bugfix on 0.2.0.x.
+
   o Minor bugfixes:
     - Get file locking working on win32.  Bugfix on 0.2.1.6-alpha.  Fixes
       bug 859.
index c3ab6bda1c27740fb0e30b6ee0f875f0c494d1b2..15f802d0c3f6f9567757ff4c4f9a891281145022 100644 (file)
@@ -1196,12 +1196,12 @@ networkstatus_add_detached_signatures(networkstatus_t *target,
   }
 
   /* For each voter in src... */
-  SMARTLIST_FOREACH(sigs->signatures, networkstatus_voter_info_t *, src_voter,
-    {
+  SMARTLIST_FOREACH_BEGIN(sigs->signatures, networkstatus_voter_info_t *,
+                          src_voter) {
       char voter_identity[HEX_DIGEST_LEN+1];
       networkstatus_voter_info_t *target_voter =
         networkstatus_get_voter_by_id(target, src_voter->identity_digest);
-      authority_cert_t *cert;
+      authority_cert_t *cert = NULL;
 
       base16_encode(voter_identity, sizeof(voter_identity),
                     src_voter->identity_digest, DIGEST_LEN);
@@ -1228,6 +1228,7 @@ networkstatus_add_detached_signatures(networkstatus_t *target,
           networkstatus_check_voter_signature(target, src_voter, cert);
         }
       }
+
       /* If this signature is good, or we don't have any signature yet,
        * then add it. */
       if (src_voter->good_signature || !target_voter->signature) {
@@ -1239,12 +1240,12 @@ networkstatus_add_detached_signatures(networkstatus_t *target,
         memcpy(target_voter->signing_key_digest, src_voter->signing_key_digest,
                DIGEST_LEN);
         target_voter->signature_len = src_voter->signature_len;
-        target_voter->good_signature = 1;
-        target_voter->bad_signature = 0;
+        target_voter->good_signature = src_voter->good_signature;
+        target_voter->bad_signature = src_voter->bad_signature;
       } else {
         log_info(LD_DIR, "Not adding signature from %s", voter_identity);
       }
-    });
+  } SMARTLIST_FOREACH_END(src_voter);
 
   return r;
 }