]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Merge branch 'maint-0.4.5' into maint-0.4.6
authorGeorge Kadianakis <desnacked@riseup.net>
Fri, 23 Apr 2021 10:00:23 +0000 (13:00 +0300)
committerGeorge Kadianakis <desnacked@riseup.net>
Fri, 23 Apr 2021 10:00:23 +0000 (13:00 +0300)
1  2 
src/feature/hs/hs_cache.c

index bb1532f808d2abedc0a95099c4b01d5b6a72bfb2,9c359367483a57f4922d44b27a415271edd443c8..cf8e37731341bb89f57ff0859d7dc3778f06765a
@@@ -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. */