]> source.dussan.org Git - rspamd.git/commitdiff
[Fix] Fix potential crash on reload
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 12 Jun 2018 10:17:08 +0000 (11:17 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 12 Jun 2018 10:17:08 +0000 (11:17 +0100)
src/rspamd.c

index 643d249b184f0cabce02c1e60745fe2993d707d4..777726478c1fc6017834205a9b31459a11938229 100644 (file)
@@ -361,12 +361,15 @@ create_listen_socket (GPtrArray *addrs, guint cnt,
        g_ptr_array_sort (addrs, rspamd_inet_address_compare_ptr);
        for (i = 0; i < cnt; i ++) {
 
+               /*
+                * Copy address to avoid reload issues
+                */
                if (listen_type & RSPAMD_WORKER_SOCKET_TCP) {
                        fd = rspamd_inet_address_listen (g_ptr_array_index (addrs, i),
                                        SOCK_STREAM, TRUE);
                        if (fd != -1) {
                                ls = g_malloc0 (sizeof (*ls));
-                               ls->addr = g_ptr_array_index (addrs, i);
+                               ls->addr = rspamd_inet_address_copy (g_ptr_array_index (addrs, i));
                                ls->fd = fd;
                                ls->type = RSPAMD_WORKER_SOCKET_TCP;
                                result = g_list_prepend (result, ls);
@@ -377,7 +380,7 @@ create_listen_socket (GPtrArray *addrs, guint cnt,
                                        SOCK_DGRAM, TRUE);
                        if (fd != -1) {
                                ls = g_malloc0 (sizeof (*ls));
-                               ls->addr = g_ptr_array_index (addrs, i);
+                               ls->addr = rspamd_inet_address_copy (g_ptr_array_index (addrs, i));
                                ls->fd = fd;
                                ls->type = RSPAMD_WORKER_SOCKET_UDP;
                                result = g_list_prepend (result, ls);