aboutsummaryrefslogtreecommitdiffstats
path: root/src/lua/lua_common.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2019-05-01 16:36:49 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2019-05-01 16:36:49 +0100
commit1a961917c458b847fc27b1aa03a82b2b5605b4cb (patch)
tree3f3fa37c7c165dd5a1ea5ac2bd089bd01fcd517b /src/lua/lua_common.c
parentf4efae27e91d2666c10097701c5d1345a4b92cf7 (diff)
downloadrspamd-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.c42
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;