From 64113e2386731f48b88de2d0d8975213cb312f83 Mon Sep 17 00:00:00 2001 From: Ralph Boehme Date: Wed, 5 Jul 2023 11:33:58 +0200 Subject: [PATCH] smbd: call exit_server_cleanly() to avoid panicking The parent smdb forwards SIGTERM to its process group in order to kill all children like the scavenger. This happens from a function registered via atexit() which means the signal forwarding is happening very briefly before the main smbd process exits. When exiting the pipe between smbd and scavenger is closed which triggers a file event in the scavenger. However, due to kernel sheduling it is possible that the file descriptor event is received before the signal, where we call exit_server() which call smb_panic() at the end. Change the exit to exit_server_cleanly() and just log this event at level 2 which we already do. BUG: https://bugzilla.samba.org/show_bug.cgi?id=15275 Signed-off-by: Ralph Boehme Reviewed-by: Stefan Metzmacher Autobuild-User(master): Stefan Metzmacher Autobuild-Date(master): Wed Jul 5 13:14:08 UTC 2023 on atb-devel-224 (cherry picked from commit 083fe1c28c6ec69cbd15d8cc2f7f06b1b630f2bc) --- source3/smbd/scavenger.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/smbd/scavenger.c b/source3/smbd/scavenger.c index fe47c22e05ff..59b84cc54307 100644 --- a/source3/smbd/scavenger.c +++ b/source3/smbd/scavenger.c @@ -104,7 +104,7 @@ static void smbd_scavenger_parent_dead(struct tevent_context *event_ctx, server_id_str_buf(*state->scavenger_id, &tmp1), server_id_str_buf(state->parent_id, &tmp2))); - exit_server("smbd_scavenger_parent_dead"); + exit_server_cleanly("smbd_scavenger_parent_dead"); } static void scavenger_sig_term_handler(struct tevent_context *ev, -- 2.34.1