From: William Lallemand Date: Wed, 7 Dec 2022 14:21:24 +0000 (+0100) Subject: BUG/MEDIUM: mworker: fix segv in early failure of mworker mode with peers X-Git-Tag: v2.8-dev1~170 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=035058e8bfe4fc731b2ede8fcdc2b8d14c4936ce;p=thirdparty%2Fhaproxy.git 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. --- diff --git a/src/mworker.c b/src/mworker.c index fc4dee104c..90e96158db 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;