diff --git a/ChangeLog b/ChangeLog index b37f45bc42..bba40eb93f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -36,6 +36,13 @@ Changes in version 0.2.1.15??? - ????-??-?? memory right up to the end of a memarea, then realigned the memory one step beyond the end. Fixes a possible cause of bug 930. + - Stop using malloc_usable_size() to use more area than we had + actually allocated: it was safe, but made valgrind really + unhappy. Bugfix on 0.2.0.x. + - Fix use of freed memory when deciding to mark a non-addable + descriptor as never-downloadable. Bugfix on 0.2.1.9-alpha. + - Fix a memory leak when v3 directory authorities load their keys + and cert from disk. Bugfix on 0.2.0.1-alpha. Changes in version 0.2.1.14-rc - 2009-04-12 diff --git a/src/common/util.c b/src/common/util.c index d153df8cf1..13c55b2888 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -258,7 +258,9 @@ _tor_malloc_roundup(size_t *sizep DMALLOC_PARAMS) #ifdef HAVE_MALLOC_GOOD_SIZE *sizep = malloc_good_size(*sizep); return _tor_malloc(*sizep DMALLOC_FN_ARGS); -#elif defined(HAVE_MALLOC_USABLE_SIZE) && !defined(USE_DMALLOC) +#elif 0 && defined(HAVE_MALLOC_USABLE_SIZE) && !defined(USE_DMALLOC) + /* Never use malloc_usable_size(); it makes valgrind really unhappy, + * and doesn't win much in terms of usable space where it exists. */ void *result = _tor_malloc(*sizep DMALLOC_FN_ARGS); *sizep = malloc_usable_size(result); return result; diff --git a/src/or/router.c b/src/or/router.c index 45ea18b14f..da922b7508 100644 --- a/src/or/router.c +++ b/src/or/router.c @@ -330,9 +330,6 @@ load_authority_keyset(int legacy, crypto_pk_env_t **key_out, "certificate"); goto done; } - parsed->cache_info.signed_descriptor_body = cert; - parsed->cache_info.signed_descriptor_len = eos-cert; - cert = NULL; if (*key_out) crypto_free_pk_env(*key_out); diff --git a/src/or/routerlist.c b/src/or/routerlist.c index c6bfca4546..de38e354e0 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -3513,6 +3513,7 @@ router_load_routers_from_string(const char *s, const char *eos, SMARTLIST_FOREACH_BEGIN(routers, routerinfo_t *, ri) { was_router_added_t r; + char d[DIGEST_LEN]; if (requested_fingerprints) { base16_encode(fp, sizeof(fp), descriptor_digests ? ri->cache_info.signed_descriptor_digest : @@ -3533,6 +3534,7 @@ router_load_routers_from_string(const char *s, const char *eos, } } + memcpy(d, ri->cache_info.signed_descriptor_digest, DIGEST_LEN); r = router_add_to_routerlist(ri, &msg, from_cache, !from_cache); if (WRA_WAS_ADDED(r)) { any_changed++; @@ -3541,11 +3543,10 @@ router_load_routers_from_string(const char *s, const char *eos, smartlist_clear(changed); } else if (WRA_WAS_REJECTED(r)) { download_status_t *dl_status; - dl_status = router_get_dl_status_by_descriptor_digest( - ri->cache_info.signed_descriptor_digest); + dl_status = router_get_dl_status_by_descriptor_digest(d); if (dl_status) { log_info(LD_GENERAL, "Marking router %s as never downloadable", - hex_str(ri->cache_info.signed_descriptor_digest, DIGEST_LEN)); + hex_str(d, DIGEST_LEN)); download_status_mark_impossible(dl_status); } }