]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
rndc: prevent crashing after receiving a signal
authorMichał Kępień <michal@isc.org>
Wed, 19 Jan 2022 13:30:17 +0000 (14:30 +0100)
committerMichał Kępień <michal@isc.org>
Wed, 19 Jan 2022 13:30:17 +0000 (14:30 +0100)
If isc_app_run() gets interrupted by a signal, the global 'rndc_task'
variable may already be detached from (set to NULL) by the time the
outstanding netmgr callbacks are run.  This triggers an assertion
failure in isc_task_shutdown().  However, explicitly calling
isc_task_shutdown() from rndc code is redundant because it does not use
isc_task_onshutdown() and the task_shutdown() function gets
automatically called anyway when the task manager gets destroyed (after
isc_app_run() returns).  Remove the redundant isc_task_shutdown() calls
to prevent crashes after receiving a signal.

bin/rndc/rndc.c

index c6e3212f685b90eda994ee1739e6f4922a6900cb..f25db5a80adf3ab656d859fa4ecbce23658368cd 100644 (file)
@@ -307,7 +307,6 @@ rndc_senddone(isc_nmhandle_t *handle, isc_result_t result, void *arg) {
            atomic_load_acquire(&recvs) == 0)
        {
                shuttingdown = true;
-               isc_task_shutdown(rndc_task);
                isc_app_shutdown();
        }
 }
@@ -393,7 +392,6 @@ rndc_recvdone(isc_nmhandle_t *handle, isc_result_t result, void *arg) {
            atomic_fetch_sub_release(&recvs, 1) == 1)
        {
                shuttingdown = true;
-               isc_task_shutdown(rndc_task);
                isc_app_shutdown();
        }
 }