]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Minor] Strictly check worker context magic
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 4 Oct 2019 12:38:10 +0000 (13:38 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 4 Oct 2019 12:38:10 +0000 (13:38 +0100)
src/controller.c
src/fuzzy_storage.c
src/hs_helper.c
src/libserver/worker_util.c
src/libserver/worker_util.h
src/rspamd_proxy.c
src/worker.c

index 27c6d18ccba16ed3559552351caccb526934cc70..33273772454226141cc7fcafe77f3cce0faaef4f 100644 (file)
@@ -3701,6 +3701,7 @@ start_controller_worker (struct rspamd_worker *worker)
        const ev_tstamp save_stats_interval = 60; /* 1 minute */
        gpointer m;
 
+       g_assert (rspamd_worker_check_context (worker->ctx, rspamd_controller_ctx_magic));
        ctx->event_loop = rspamd_prepare_worker (worker,
                        "controller",
                        rspamd_controller_accept_socket);
index ef2afac4b5ead67dc88574cc4b63d31020466565..d0d69c83cb92cd6af438e0f744d3d12869b5bd93 100644 (file)
@@ -1895,6 +1895,7 @@ start_fuzzy (struct rspamd_worker *worker)
        struct rspamd_srv_command srv_cmd;
        struct rspamd_config *cfg = worker->srv->cfg;
 
+       g_assert (rspamd_worker_check_context (worker->ctx, rspamd_fuzzy_storage_magic));
        ctx->event_loop = rspamd_prepare_worker (worker,
                        "fuzzy",
                        NULL);
index 3cdc2a43973ea5a71af6c2b44f6666d2da79542e..a20e176f6ed0a23860757bb15f879a38bef99a1a 100644 (file)
@@ -303,6 +303,7 @@ start_hs_helper (struct rspamd_worker *worker)
        struct hs_helper_ctx *ctx = worker->ctx;
        double tim;
 
+       g_assert (rspamd_worker_check_context (worker->ctx, rspamd_hs_helper_magic));
        ctx->cfg = worker->srv->cfg;
 
        if (ctx->hs_dir == NULL) {
index 4779fd57a6831a43c3cba07578aa8094226335f9..eff39a8b074caa8b51c86fa97c8f7d1d53a90d4f 100644 (file)
@@ -1472,4 +1472,12 @@ rspamd_worker_hyperscan_ready (struct rspamd_main *rspamd_main,
 
        return TRUE;
 }
+
+gboolean
+rspamd_worker_check_context (gpointer ctx, guint64 magic)
+{
+       struct rspamd_abstract_worker_ctx *actx = (struct rspamd_abstract_worker_ctx*)ctx;
+
+       return actx->magic == magic;
+}
 #endif
\ No newline at end of file
index d0966e0091f4becced572a4cd0feb684d0a5a93c..6fbda0b4ace835372c5a7642013a8396e4cc9021 100644 (file)
@@ -57,6 +57,14 @@ struct ev_loop *
 rspamd_prepare_worker (struct rspamd_worker *worker, const char *name,
                                           rspamd_accept_handler hdl);
 
+/**
+ * Should be used to validate context for a worker as in assert like invocation
+ * @param ctx
+ * @param magic
+ * @return
+ */
+gboolean rspamd_worker_check_context (gpointer ctx, guint64 magic);
+
 /**
  * Set special signal handler for a worker
  */
index be3395273f765404c3a3ba2c1d108e126963b81d..dbf90560987ee89f8aa2117e8ff362760c0b7806 100644 (file)
@@ -2216,6 +2216,7 @@ start_rspamd_proxy (struct rspamd_worker *worker)
 {
        struct rspamd_proxy_ctx *ctx = worker->ctx;
 
+       g_assert (rspamd_worker_check_context (worker->ctx, rspamd_rspamd_proxy_magic));
        ctx->cfg = worker->srv->cfg;
        ctx->event_loop = rspamd_prepare_worker (worker, "rspamd_proxy",
                        proxy_accept_socket);
index 349a0ea92fb16b7b4e57c214cb42912a2fbd2683..04447feea7a3fe428984c9961591643bdaacc887 100644 (file)
@@ -525,7 +525,6 @@ init_worker (struct rspamd_config *cfg)
        GQuark type;
 
        type = g_quark_try_string ("normal");
-
        ctx = rspamd_mempool_alloc0 (cfg->cfg_pool,
                        sizeof (struct rspamd_worker_ctx));
 
@@ -645,6 +644,7 @@ start_worker (struct rspamd_worker *worker)
 {
        struct rspamd_worker_ctx *ctx = worker->ctx;
 
+       g_assert (rspamd_worker_check_context (worker->ctx, rspamd_worker_magic));
        ctx->cfg = worker->srv->cfg;
        ctx->event_loop = rspamd_prepare_worker (worker, "normal", accept_socket);
        rspamd_symcache_start_refresh (worker->srv->cfg->cache, ctx->event_loop,