]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
hs-v3: Don't crash after SIGHUP in Onionbalance backend mode.
authorGeorge Kadianakis <desnacked@riseup.net>
Mon, 30 Mar 2020 20:17:39 +0000 (23:17 +0300)
committerGeorge Kadianakis <desnacked@riseup.net>
Mon, 30 Mar 2020 20:35:19 +0000 (23:35 +0300)
The ob_subcreds array was not copied after SIGHUP, and that left the
post-SIGHUP service with a NULL ob_subcreds pointer (until the next descriptor
gets build where we regenerate ob_subcreds in hs_ob_refresh_keys()).

Fixes bug #33762; not in any released tor version.

src/feature/hs/hs_service.c

index 3a2beb766fa5e55df8f26b03ce2bb97d12dec2ea..367f8ca2b33354bcad57dcb2d6b845912c803620 100644 (file)
@@ -890,10 +890,18 @@ move_hs_state(hs_service_t *src_service, hs_service_t *dst_service)
   if (dst->replay_cache_rend_cookie != NULL) {
     replaycache_free(dst->replay_cache_rend_cookie);
   }
+
   dst->replay_cache_rend_cookie = src->replay_cache_rend_cookie;
+  src->replay_cache_rend_cookie = NULL; /* steal pointer reference */
+
   dst->next_rotation_time = src->next_rotation_time;
 
-  src->replay_cache_rend_cookie = NULL; /* steal pointer reference */
+  if (src_service->ob_subcreds) {
+    dst_service->ob_subcreds = src_service->ob_subcreds;
+    dst_service->n_ob_subcreds =  src_service->n_ob_subcreds;
+
+    src_service->ob_subcreds = NULL; /* steal pointer reference */
+  }
 }
 
 /** Register services that are in the staging list. Once this function returns,