From 5dc00c06615ef1e99e1d82dfdf41823c0d4bf7f6 Mon Sep 17 00:00:00 2001 From: George Kadianakis Date: Tue, 8 May 2018 18:07:08 +0300 Subject: [PATCH 1/2] Detect when v2 services get disabled after HUP. During service configuration, rend_service_prune_list_impl_() sets rend_service_staging_list to NULL, which blocked pruning after a HUP. This patch initializes rend_service_staging_list when needed, so that HUP can detect disabled onion services. Fixes bug #25761. --- src/or/rendservice.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/or/rendservice.c b/src/or/rendservice.c index 2c5c5840a..fed8c97eb 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -618,10 +618,11 @@ void rend_service_prune_list(void) { smartlist_t *old_service_list = rend_service_list; - /* Don't try to prune anything if we have no staging list. */ + if (!rend_service_staging_list) { - return; + rend_service_staging_list = smartlist_new(); } + rend_service_prune_list_impl_(); if (old_service_list) { /* Every remaining service in the old list have been removed from the From 7e8c5e36622d4581840bb0a037a66d9504c433a5 Mon Sep 17 00:00:00 2001 From: George Kadianakis Date: Tue, 8 May 2018 18:14:02 +0300 Subject: [PATCH 2/2] Detect when v3 services get disabled after HUP. Remove v3 optimization which made Tor not detect disabling services. This optimization is not so needed because we only call that function after HUP anyway. Fixes bug #25761. --- changes/bug25761 | 3 +++ src/or/hs_service.c | 5 ----- 2 files changed, 3 insertions(+), 5 deletions(-) create mode 100644 changes/bug25761 diff --git a/changes/bug25761 b/changes/bug25761 new file mode 100644 index 000000000..096fadcf0 --- /dev/null +++ b/changes/bug25761 @@ -0,0 +1,3 @@ + o Major bugfixes (onion service): + - Correctly detect when onion services get disabled after HUP. + Fixes bug 25761; bugfix on 0.3.2.1. diff --git a/src/or/hs_service.c b/src/or/hs_service.c index 8ddd68c69..b9a1dfc36 100644 --- a/src/or/hs_service.c +++ b/src/or/hs_service.c @@ -859,11 +859,6 @@ register_all_services(void) tor_assert(hs_service_staging_list); - /* We'll save us some allocation and computing time. */ - if (smartlist_len(hs_service_staging_list) == 0) { - return; - } - /* Allocate a new map that will replace the current one. */ new_service_map = tor_malloc_zero(sizeof(*new_service_map)); HT_INIT(hs_service_ht, new_service_map);