From 035058e8bfe4fc731b2ede8fcdc2b8d14c4936ce Mon Sep 17 00:00:00 2001 From: William Lallemand Date: Wed, 7 Dec 2022 15:21:24 +0100 Subject: [PATCH] BUG/MEDIUM: mworker: fix segv in early failure of mworker mode with peers During an early failure of the mworker mode, the mworker_cleanlisteners() function is called and tries to cleanup the peers, however the peers are in a semi-initialized state and will use NULL pointers. The fix check the variable before trying to use them. Bug revealed in issue #1956. Could be backported as far as 2.0. --- src/mworker.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/mworker.c b/src/mworker.c index fc4dee104..90e96158d 100644 --- a/src/mworker.c +++ b/src/mworker.c @@ -467,8 +467,10 @@ void mworker_cleanlisteners() stop_proxy(curpeers->peers_fe); /* disable this peer section so that it kills itself */ - signal_unregister_handler(curpeers->sighandler); - task_destroy(curpeers->sync_task); + if (curpeers->sighandler) + signal_unregister_handler(curpeers->sighandler); + if (curpeers->sync_task) + task_destroy(curpeers->sync_task); curpeers->sync_task = NULL; task_destroy(curpeers->peers_fe->task); curpeers->peers_fe->task = NULL;