[tor-commits] [tor/master] Make nodelist_purge avoid orphaned microdescs in rs-less nodes

nickm at torproject.org nickm at torproject.org
Thu Jul 7 19:28:35 UTC 2011


commit a4d339cf082f27fa5852a383ff9d3a9d2d37e08d
Author: Nick Mathewson <nickm at torproject.org>
Date:   Thu Jul 7 15:17:50 2011 -0400

    Make nodelist_purge avoid orphaned microdescs in rs-less nodes
    
    We have an invariant that a node_t should have an md only if it has
    a routerstatus.  nodelist_purge tried to preserve this by removing
    all nodes without a routerstatus or a routerinfo.  But this left
    nodes with a routerinfo and a microdesc untouched, even if they had
    a routerstatus.
    
    Bug found by frosty_un.
---
 src/or/nodelist.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/src/or/nodelist.c b/src/or/nodelist.c
index 0813121..308aaa8 100644
--- a/src/or/nodelist.c
+++ b/src/or/nodelist.c
@@ -317,6 +317,12 @@ nodelist_purge(void)
   for (iter = HT_START(nodelist_map, &the_nodelist->nodes_by_id); iter; ) {
     node_t *node = *iter;
 
+    if (node->md && !node->rs) {
+      /* An md is only useful if there is an rs. */
+      node->md->held_by_node = 0;
+      node->md = NULL;
+    }
+
     if (node_is_usable(node)) {
       iter = HT_NEXT(nodelist_map, &the_nodelist->nodes_by_id, iter);
     } else {



More information about the tor-commits mailing list