static void _gcry_secmem_free_internal (void *a) { memblock_t *mb; int size; if (!a) return; mb = ADDR_TO_BLOCK (a); size = mb->size; /* This does not make much sense: probably this memory is held in the * cache. We do it anyway: */ #define MB_WIPE_OUT(byte) \ wipememory2 ((memblock_t *) ((char *) mb + BLOCK_HEAD_SIZE), (byte), size); MB_WIPE_OUT (0xff); MB_WIPE_OUT (0xaa); MB_WIPE_OUT (0x55); MB_WIPE_OUT (0x00); stats_update (0, size); mb->flags &= ~MB_FLAG_ACTIVE; /* Update stats. */ mb_merge (mb); }
int _gcry_private_is_secure (const void *p) { int ret = 0; SECMEM_LOCK; if (pool_okay && BLOCK_VALID (ADDR_TO_BLOCK (p))) ret = 1; SECMEM_UNLOCK; return ret; }