diff options
author | Vsevolod Stakhov <vsevolod@rspamd.com> | 2022-10-29 10:42:30 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@rspamd.com> | 2022-10-29 10:42:30 +0100 |
commit | a18c2f7c4b3628b33b7fde7508f4bd1763a9cde4 (patch) | |
tree | 5d38afeac462efcd0fe50a4d1199696e794d57dd /src/libserver/worker_util.c | |
parent | 5bf1a1a224ba338dceb638691c8dc1bf4be9a866 (diff) | |
download | rspamd-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.c | 28 |
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) { |