]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Prevent data corruption when dealing with signals
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 24 Jul 2017 07:43:42 +0000 (08:43 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 24 Jul 2017 07:43:42 +0000 (08:43 +0100)
src/fuzzy_storage.c
src/hs_helper.c
src/libserver/rspamd_control.c
src/libserver/worker_util.c
src/log_helper.c
src/lua/lua_common.c

index 47b76fb9ba7b205582f1ea946f51e57c4f23f8e0..ad77c28481450dabf80705a694114711859388f4 100644 (file)
@@ -2869,7 +2869,6 @@ start_fuzzy (struct rspamd_worker *worker)
        /* Get peer pipe */
        memset (&srv_cmd, 0, sizeof (srv_cmd));
        srv_cmd.type = RSPAMD_SRV_SOCKETPAIR;
-       srv_cmd.id = ottery_rand_uint64 ();
        srv_cmd.cmd.spair.af = SOCK_DGRAM;
        srv_cmd.cmd.spair.pair_num = worker->index;
        memset (srv_cmd.cmd.spair.pair_id, 0, sizeof (srv_cmd.cmd.spair.pair_id));
index 8e63469b108f24ffdde05e1b2fb3a16f9d6dc095..390c5e25fa429f00321e04b06ced8b3920fc46c8 100644 (file)
@@ -220,6 +220,7 @@ rspamd_rs_compile (struct hs_helper_ctx *ctx, struct rspamd_worker *worker,
                ctx->loaded = TRUE;
        }
 
+       memset (&srv_cmd, 0, sizeof (srv_cmd));
        srv_cmd.type = RSPAMD_SRV_HYPERSCAN_LOADED;
        rspamd_strlcpy (srv_cmd.cmd.hs_loaded.cache_dir, ctx->hs_dir,
                        sizeof (srv_cmd.cmd.hs_loaded.cache_dir));
index 279d47d6b715a729c9863541ae58e4dcb2caeb9d..14a25882884c719b5224f4c67d432f0788a3ec85 100644 (file)
@@ -1079,6 +1079,7 @@ rspamd_srv_send_command (struct rspamd_worker *worker,
        g_assert (worker != NULL);
 
        rd = g_slice_alloc0 (sizeof (*rd));
+       cmd->id = ottery_rand_uint64 ();
        memcpy (&rd->cmd, cmd, sizeof (rd->cmd));
        rd->handler = handler;
        rd->ud = ud;
index 7753fa1b3ccc7ba188fa7acdd9c8edbda0098694..9791c1989d1c887bc46b4c1b9bf426d9c65a8a08 100644 (file)
@@ -338,19 +338,23 @@ rspamd_worker_stop_accept (struct rspamd_worker *worker)
        if (worker->accept_events != NULL) {
                g_list_free (worker->accept_events);
        }
-
+       /* XXX: we need to do it much later */
+#if 0
        g_hash_table_iter_init (&it, worker->signal_events);
 
        while (g_hash_table_iter_next (&it, &k, &v)) {
                sigh = (struct rspamd_worker_signal_handler *)v;
                g_hash_table_iter_steal (&it);
+
                if (sigh->enabled) {
                        event_del (&sigh->ev);
                }
+
                g_free (sigh);
        }
 
        g_hash_table_unref (worker->signal_events);
+#endif
 
        /* Cleanup maps */
        for (cur = worker->srv->cfg->maps; cur != NULL; cur = g_list_next (cur)) {
@@ -820,6 +824,7 @@ rspamd_worker_monitored_on_change (struct rspamd_monitored_ctx *ctx,
 
        rspamd_monitored_get_tag (m, tag);
        ev_base = rspamd_monitored_ctx_get_ev_base (ctx);
+       memset (&srv_cmd, 0, sizeof (srv_cmd));
        srv_cmd.type = RSPAMD_SRV_MONITORED_CHANGE;
        rspamd_strlcpy (srv_cmd.cmd.monitored_change.tag, tag,
                        sizeof (srv_cmd.cmd.monitored_change.tag));
index 9800ab9d3215762c6f30b1aae093d53a7f55c054..0f98a557961ad846dd267dfdbf6457f97d19701f 100644 (file)
@@ -212,6 +212,7 @@ start_log_helper (struct rspamd_worker *worker)
                exit (EXIT_SUCCESS);
        }
 
+       memset (&srv_cmd, 0, sizeof (srv_cmd));
        srv_cmd.type = RSPAMD_SRV_LOG_PIPE;
        srv_cmd.cmd.log_pipe.type = RSPAMD_LOG_PIPE_SYMBOLS;
 
index 22d1f24466eb0c8f38bae612925a4fba76524ba9..e94cbe2818d924788746312a3e0b5e1fee6041a2 100644 (file)
@@ -1478,6 +1478,7 @@ rspamd_lua_cld_handler (struct rspamd_worker_signal_handler *sigh, void *ud)
        g_free (cbdata);
 
        /* Notify main */
+       memset (&srv_cmd, 0, sizeof (srv_cmd));
        srv_cmd.type = RSPAMD_SRV_ON_FORK;
        srv_cmd.cmd.on_fork.state = child_dead;
        srv_cmd.cmd.on_fork.cpid = cbdata->cpid;
@@ -1679,6 +1680,7 @@ lua_worker_spawn_process (lua_State *L)
        cbdata->cpid = pid;
        cbdata->io_buf = g_string_sized_new (8);
        /* Notify main */
+       memset (&srv_cmd, 0, sizeof (srv_cmd));
        srv_cmd.type = RSPAMD_SRV_ON_FORK;
        srv_cmd.cmd.on_fork.state = child_create;
        srv_cmd.cmd.on_fork.cpid = pid;