summaryrefslogtreecommitdiffstats
path: root/src/libserver/worker_util.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rspamd.com>2022-10-29 10:42:30 +0100
committerVsevolod Stakhov <vsevolod@rspamd.com>2022-10-29 10:42:30 +0100
commita18c2f7c4b3628b33b7fde7508f4bd1763a9cde4 (patch)
tree5d38afeac462efcd0fe50a4d1199696e794d57dd /src/libserver/worker_util.c
parent5bf1a1a224ba338dceb638691c8dc1bf4be9a866 (diff)
downloadrspamd-a18c2f7c4b3628b33b7fde7508f4bd1763a9cde4.tar.gz
rspamd-a18c2f7c4b3628b33b7fde7508f4bd1763a9cde4.zip
[Minor] Plug memory leak for sigaltstack
Diffstat (limited to 'src/libserver/worker_util.c')
-rw-r--r--src/libserver/worker_util.c28
1 files changed, 22 insertions, 6 deletions
diff --git a/src/libserver/worker_util.c b/src/libserver/worker_util.c
index 4529e4ee0..92ae46bf0 100644
--- a/src/libserver/worker_util.c
+++ b/src/libserver/worker_util.c
@@ -1664,12 +1664,6 @@ rspamd_set_crash_handler (struct rspamd_main *rspamd_main)
stack_t ss;
memset (&ss, 0, sizeof ss);
- /*
- * Allocate special stack, NOT freed at the end so far
- * It also cannot be on stack as this memory is used when
- * stack corruption is detected. Leak sanitizer blames about it but
- * I don't know any good ways to stop this behaviour.
- */
ss.ss_size = MAX (SIGSTKSZ, 8192 * 4);
stack_mem = g_malloc0 (ss.ss_size);
ss.ss_sp = stack_mem;
@@ -1687,6 +1681,28 @@ rspamd_set_crash_handler (struct rspamd_main *rspamd_main)
#endif
}
+RSPAMD_NO_SANITIZE void rspamd_unset_crash_handler (struct rspamd_main *unused_)
+{
+#ifdef HAVE_SIGALTSTACK
+ int ret;
+ stack_t ss;
+ ret = sigaltstack (NULL, &ss);
+
+ if (ret != -1) {
+ if (ss.ss_size > 0 && ss.ss_sp) {
+ g_free(ss.ss_sp);
+ }
+
+ ss.ss_size = 0;
+ ss.ss_sp = NULL;
+#ifdef SS_DISABLE
+ ss.ss_flags |= SS_DISABLE;
+#endif
+ sigaltstack(&ss, NULL);
+ }
+#endif
+}
+
static void
rspamd_enable_accept_event (EV_P_ ev_timer *w, int revents)
{