s3:rpc_server/mdssvc: don't crash mdssvc_tracker_shutdown with NULL glue
authorStefan Metzmacher <metze@samba.org>
Wed, 11 Jan 2023 22:48:11 +0000 (23:48 +0100)
committerJeremy Allison <jra@samba.org>
Thu, 19 Jan 2023 19:46:01 +0000 (19:46 +0000)
If mdssvc_tracker_shutdown() is called without any mds_tracker_connect()
we would crash as mdssvc_tracker_init() don't call
mdssvc_tracker_prepare().

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Thu Jan 19 19:46:01 UTC 2023 on atb-devel-224

source3/rpc_server/mdssvc/mdssvc_tracker.c

index fab8bd22324877b290677e820d29bbafa16dfc71..7ad6989fd258f5b2dfd083a27be414f3755bbc6f 100644 (file)
@@ -286,7 +286,6 @@ static bool mdssvc_tracker_prepare(void)
        mdssvc_tracker_ctx->gmain_ctx = g_main_context_new();
        if (mdssvc_tracker_ctx->gmain_ctx == NULL) {
                DBG_ERR("error from g_main_context_new\n");
-               TALLOC_FREE(mdssvc_tracker_ctx);
                return false;
        }
 
@@ -297,7 +296,7 @@ static bool mdssvc_tracker_prepare(void)
        if (mdssvc_tracker_ctx->glue == NULL) {
                DBG_ERR("samba_tevent_glib_glue_create failed\n");
                g_object_unref(mdssvc_tracker_ctx->gmain_ctx);
-               TALLOC_FREE(mdssvc_tracker_ctx);
+               mdssvc_tracker_ctx->gmain_ctx = NULL;
                return false;
        }
 
@@ -306,10 +305,19 @@ static bool mdssvc_tracker_prepare(void)
 
 static bool mdssvc_tracker_shutdown(struct mdssvc_ctx *mdssvc_ctx)
 {
+       if (mdssvc_tracker_ctx == NULL) {
+               return true;
+       }
+
+       if (mdssvc_tracker_ctx->gmain_ctx == NULL) {
+               return true;
+       }
+
        samba_tevent_glib_glue_quit(mdssvc_tracker_ctx->glue);
        TALLOC_FREE(mdssvc_tracker_ctx->glue);
 
        g_object_unref(mdssvc_tracker_ctx->gmain_ctx);
+       mdssvc_tracker_ctx->gmain_ctx = NULL;
        return true;
 }