smbd: call exit_server_cleanly() to avoid panicking
authorRalph Boehme <slow@samba.org>
Wed, 5 Jul 2023 09:33:58 +0000 (11:33 +0200)
committerJule Anger <janger@samba.org>
Thu, 6 Jul 2023 12:31:16 +0000 (12:31 +0000)
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 <slow@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
Autobuild-User(master): Stefan Metzmacher <metze@samba.org>
Autobuild-Date(master): Wed Jul  5 13:14:08 UTC 2023 on atb-devel-224

(cherry picked from commit 083fe1c28c6ec69cbd15d8cc2f7f06b1b630f2bc)

source3/smbd/scavenger.c

index fe47c22e05ffde3d2a3115e698ec1b693641668b..59b84cc54307dec3e3c9d9895087e70c7e132518 100644 (file)
@@ -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,