diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2019-05-01 16:36:49 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2019-05-01 16:36:49 +0100 |
commit | 1a961917c458b847fc27b1aa03a82b2b5605b4cb (patch) | |
tree | 3f3fa37c7c165dd5a1ea5ac2bd089bd01fcd517b /src/lua/lua_common.c | |
parent | f4efae27e91d2666c10097701c5d1345a4b92cf7 (diff) | |
download | rspamd-1a961917c458b847fc27b1aa03a82b2b5605b4cb.tar.gz rspamd-1a961917c458b847fc27b1aa03a82b2b5605b4cb.zip |
[Minor] Wipe memory in rspamadm
Diffstat (limited to 'src/lua/lua_common.c')
-rw-r--r-- | src/lua/lua_common.c | 42 |
1 files changed, 39 insertions, 3 deletions
diff --git a/src/lua/lua_common.c b/src/lua/lua_common.c index 81fac3640..b83b68bf0 100644 --- a/src/lua/lua_common.c +++ b/src/lua/lua_common.c @@ -870,12 +870,48 @@ lua_push_trace_data (lua_State *L) } #endif + + +static void * +rspamd_lua_wipe_realloc (void *ud, + void *ptr, + size_t osize, + size_t nsize) RSPAMD_ATTR_ALLOC_SIZE(4); +static void * +rspamd_lua_wipe_realloc (void *ud, + void *ptr, + size_t osize, + size_t nsize) +{ + if (nsize == 0) { + if (ptr) { + rspamd_explicit_memzero (ptr, osize); + } + + free (ptr); + } + else if (ptr == NULL) { + return malloc (nsize); + } + else { + return realloc (ptr, nsize); + } + + return NULL; +} + lua_State * -rspamd_lua_init () +rspamd_lua_init (bool wipe_mem) { lua_State *L; - L = luaL_newstate (); + if (wipe_mem) { + L = lua_newstate (rspamd_lua_wipe_realloc, NULL); + } + else { + L = luaL_newstate (); + } + luaL_openlibs (L); luaopen_logger (L); luaopen_mempool (L); @@ -984,7 +1020,7 @@ rspamd_init_lua_locked (struct rspamd_config *cfg) struct lua_locked_state *new; new = g_malloc0 (sizeof (struct lua_locked_state)); - new->L = rspamd_lua_init (); + new->L = rspamd_lua_init (false); new->m = rspamd_mutex_new (); return new; |