[tor-commits] [tor/release-0.3.4] fix memory leak in protover.c

nickm at torproject.org nickm at torproject.org
Thu Jun 21 12:36:55 UTC 2018


commit 7b1a3c51644891c4548ccdfd4e8d444cd91b91b0
Author: Roger Dingledine <arma at torproject.org>
Date:   Wed Jun 20 19:43:58 2018 -0400

    fix memory leak in protover.c
    
    Fix a memory leak where directory authorities would leak a chunk of
    memory for every router descriptor every time they considered voting.
    
    This bug was taking down directory authorities in the live network due
    to out-of-memory issues.
    
    Fixes bug 26435; bugfix on 0.3.3.6.
---
 changes/bug26435  | 5 +++++
 src/or/protover.c | 9 ++++++---
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/changes/bug26435 b/changes/bug26435
new file mode 100644
index 000000000..c28194934
--- /dev/null
+++ b/changes/bug26435
@@ -0,0 +1,5 @@
+  o Major bugfixes:
+    - Fix a memory leak where directory authorities would leak a chunk
+      of memory for every router descriptor every time they considered
+      voting. This bug was taking down directory authorities due to
+      out-of-memory issues. Fixes bug 26435; bugfix on 0.3.3.6.
diff --git a/src/or/protover.c b/src/or/protover.c
index b2ec3372c..5145881ba 100644
--- a/src/or/protover.c
+++ b/src/or/protover.c
@@ -283,9 +283,12 @@ parse_protocol_list(const char *s)
 bool
 protover_contains_long_protocol_names(const char *s)
 {
-  if (!parse_protocol_list(s))
-    return true;
-  return false;
+  smartlist_t *list = parse_protocol_list(s);
+  if (!list)
+    return true; /* yes, has a dangerous name */
+  SMARTLIST_FOREACH(list, proto_entry_t *, ent, proto_entry_free(ent));
+  smartlist_free(list);
+  return false; /* no, looks fine */
 }
 
 /**





More information about the tor-commits mailing list