[tor-commits] [tor/master] Fix CID 1430932

nickm at torproject.org nickm at torproject.org
Tue Mar 27 22:26:47 UTC 2018


commit 471f28a2a85b8db8315f518aff456440f9791877
Author: Taylor Yu <catalyst at torproject.org>
Date:   Mon Mar 26 19:29:59 2018 -0500

    Fix CID 1430932
    
    Coverity found a null pointer reference in nodelist_add_microdesc().
    This is almost certainly impossible assuming that the routerstatus_t
    returned by router_get_consensus_status_by_descriptor_digest() always
    corresponds to an entry in the nodelist.  Fixes bug 25629.
---
 changes/bug25629  |  3 +++
 src/or/nodelist.c | 28 ++++++++++++++--------------
 2 files changed, 17 insertions(+), 14 deletions(-)

diff --git a/changes/bug25629 b/changes/bug25629
new file mode 100644
index 000000000..190928a94
--- /dev/null
+++ b/changes/bug25629
@@ -0,0 +1,3 @@
+  o Minor bugfixes (C correctness):
+    - Fix a very unlikely null pointer dereference.  Fixes bug 25629;
+      bugfix on 0.2.9.15.  Found by Coverity; this is CID 1430932.
diff --git a/src/or/nodelist.c b/src/or/nodelist.c
index 391b31d68..125dd8b9f 100644
--- a/src/or/nodelist.c
+++ b/src/or/nodelist.c
@@ -507,22 +507,22 @@ nodelist_add_microdesc(microdesc_t *md)
   if (rs == NULL)
     return NULL;
   node = node_get_mutable_by_id(rs->identity_digest);
-  if (node) {
-    node_remove_from_ed25519_map(node);
-    if (node->md)
-      node->md->held_by_nodes--;
+  if (node == NULL)
+    return NULL;
 
-    node->md = md;
-    md->held_by_nodes++;
-    /* Setting the HSDir index requires the ed25519 identity key which can
-     * only be found either in the ri or md. This is why this is called here.
-     * Only nodes supporting HSDir=2 protocol version needs this index. */
-    if (rs->pv.supports_v3_hsdir) {
-      node_set_hsdir_index(node, ns);
-    }
-    node_add_to_ed25519_map(node);
-  }
+  node_remove_from_ed25519_map(node);
+  if (node->md)
+    node->md->held_by_nodes--;
 
+  node->md = md;
+  md->held_by_nodes++;
+  /* Setting the HSDir index requires the ed25519 identity key which can
+   * only be found either in the ri or md. This is why this is called here.
+   * Only nodes supporting HSDir=2 protocol version needs this index. */
+  if (rs->pv.supports_v3_hsdir) {
+    node_set_hsdir_index(node, ns);
+  }
+  node_add_to_ed25519_map(node);
   node_add_to_address_set(node);
 
   return node;





More information about the tor-commits mailing list