From: Victor Julien Date: Mon, 15 Jan 2018 17:16:47 +0000 (+0100) Subject: threads: don't crash in slow shutdown X-Git-Tag: suricata-4.1.0-beta1~353 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F3157%2Fhead;p=thirdparty%2Fsuricata.git threads: don't crash in slow shutdown If TmThreadDrainPacketThreads would take more than 60 seconds, the wait loop that follows it would reach 'timeout' condition immediately. This would lead to a null ptr deref of 'tv'. Fix by not counting the TmThreadDrainPacketThreads and also not doing the null ptr deref in any case. --- diff --git a/src/tm-threads.c b/src/tm-threads.c index 25fef956a8..07b2bf1b4f 100644 --- a/src/tm-threads.c +++ b/src/tm-threads.c @@ -1673,15 +1673,17 @@ void TmThreadDisablePacketThreads(void) ThreadVars *tv = NULL; struct timeval start_ts; struct timeval cur_ts; - gettimeofday(&start_ts, NULL); /* first drain all packet threads of their packets */ TmThreadDrainPacketThreads(); + + gettimeofday(&start_ts, NULL); again: gettimeofday(&cur_ts, NULL); if ((cur_ts.tv_sec - start_ts.tv_sec) > 60) { FatalError(SC_ERR_FATAL, "Engine unable to disable detect " - "thread - \"%s\". Killing engine", tv->name); + "thread - \"%s\". Killing engine", + tv ? tv->name : ""); } SCMutexLock(&tv_root_lock);