commit f0260c4cea6da784369e8d47f0b4bf01863c5af5 Merge: 38bfb3cdfe 8c29729916 Author: George Kadianakis desnacked@riseup.net Date: Fri Apr 23 13:00:23 2021 +0300
Merge branch 'maint-0.4.5' into maint-0.4.6
changes/ticket40356 | 3 +++ src/feature/hs/hs_cache.c | 61 ++++++++++++++++++++++++++++------------------- 2 files changed, 39 insertions(+), 25 deletions(-)
diff --cc src/feature/hs/hs_cache.c index bb1532f808,9c35936748..cf8e377313 --- a/src/feature/hs/hs_cache.c +++ b/src/feature/hs/hs_cache.c @@@ -390,10 -415,21 +415,21 @@@ remove_v3_desc_as_client(const hs_cache static void store_v3_desc_as_client(hs_cache_client_descriptor_t *desc) { + hs_cache_client_descriptor_t *cached_desc; + tor_assert(desc); + + /* Because the lookup function doesn't return an expired entry, it can linger + * in the cache until we clean it up or a new descriptor is stored. So, + * before adding, we'll make sure we are not overwriting an old descriptor + * (which is OK in terms of semantic) but leads to memory leak. */ + cached_desc = digest256map_get(hs_cache_v3_client, desc->key.pubkey); + if (cached_desc) { + cache_client_desc_free(cached_desc); + } digest256map_set(hs_cache_v3_client, desc->key.pubkey, desc); /* Update cache size with this entry for the OOM handler. */ - rend_cache_increment_allocation(cache_get_client_entry_size(desc)); + hs_cache_increment_allocation(cache_get_client_entry_size(desc)); }
/** Query our cache and return the entry or NULL if not found or if expired. */
tor-commits@lists.torproject.org