diff --git a/src/xmalloc.c b/src/xmalloc.c index a270c2ff..46930e8b 100644 --- a/src/xmalloc.c +++ b/src/xmalloc.c @@ -26,6 +26,7 @@ #include #include #include +#include /* wc_ForceZero */ #ifndef USE_FAST_MATH #include #include @@ -514,6 +515,9 @@ void XFREE(void *ptr, void *heap, int type) #endif while (xmalloc_pool[i].addr) { if ((ptr == (void *)(xmalloc_pool[i].addr)) && xmalloc_pool[i].in_use) { + /* Scrub the slot before releasing it: it may hold crypto + * workspace (hash blocks, signature verification state). */ + wc_ForceZero(xmalloc_pool[i].addr, xmalloc_pool[i].size); xmalloc_pool[i].in_use = 0; return; }