]> source.dussan.org Git - rspamd.git/commitdiff
[Fix] Fix invalid memory access on reload
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 17 Jan 2017 16:53:04 +0000 (16:53 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 17 Jan 2017 16:53:04 +0000 (16:53 +0000)
src/libutil/map.c
src/libutil/map_private.h

index 3794cfcfaf8b08fe7722f1b022ef04681438e7a7..ea295e7a4333c15c04af3c306cf8102b743f1369 100644 (file)
@@ -294,8 +294,9 @@ free_http_cbdata_dtor (gpointer p)
        struct rspamd_map *map;
 
        map = cbd->map;
+       cbd->stage = map_finished;
        msg_warn_map ("connection with http server is terminated: worker is stopping");
-       free_http_cbdata_common (cbd, FALSE);
+       REF_RELEASE (cbd);
 }
 
 /*
@@ -785,6 +786,11 @@ rspamd_map_dns_callback (struct rdns_reply *reply, void *arg)
 
        map = cbd->map;
 
+       if (cbd->stage == map_finished) {
+               MAP_RELEASE (cbd, "http_callback_data");
+               return;
+       }
+
        if (reply->code == RDNS_RC_NOERROR) {
                /*
                 * We just get the first address hoping that a resolver performs
@@ -1346,6 +1352,8 @@ rspamd_map_is_map (const gchar *map_line)
 static void
 rspamd_map_backend_dtor (struct rspamd_map_backend *bk)
 {
+       g_free (bk->uri);
+
        if (bk->protocol == MAP_PROTO_FILE) {
                if (bk->data.fd) {
                        g_free (bk->data.fd->filename);
index 4879d5257c663eb09ff4a016a33353d53e484651..9e24695b53d30d394a8d13cca628083dabdbf2a7 100644 (file)
@@ -116,7 +116,8 @@ enum rspamd_map_http_stage {
        map_resolve_host1, /* 1 requests sent */
        map_load_file,
        map_load_pubkey,
-       map_load_signature
+       map_load_signature,
+       map_finished
 };
 
 struct map_periodic_cbdata {