Commit 5bbdc26c authored by Andy Polyakov's avatar Andy Polyakov
Browse files

crypto/mem_clr.c: switch to OPENSSL_cleanse implementation from master.



It's probably worth reminding that this is a fall-back implementation
for platforms that don't have assembly OPENSSL_cleanse.

Reviewed-by: default avatarRich Salz <rsalz@openssl.org>
parent 4f0b6e67
Loading
Loading
Loading
Loading
+9 −15
Original line number Diff line number Diff line
@@ -60,22 +60,16 @@
#include <string.h>
#include <openssl/crypto.h>

unsigned char cleanse_ctr = 0;
/*
 * Pointer to memset is volatile so that compiler must de-reference
 * the pointer and can't assume that it points to any function in
 * particular (such as memset, which it then might further "optimize")
 */
typedef void *(*memset_t)(void *,int,size_t);

static volatile memset_t memset_func = memset;

void OPENSSL_cleanse(void *ptr, size_t len)
{
    unsigned char *p = ptr;
    size_t loop = len, ctr = cleanse_ctr;

    if (ptr == NULL)
        return;

    while (loop--) {
        *(p++) = (unsigned char)ctr;
        ctr += (17 + ((size_t)p & 0xF));
    }
    p = memchr(ptr, (unsigned char)ctr, len);
    if (p)
        ctr += (63 + (size_t)p);
    cleanse_ctr = (unsigned char)ctr;
    memset_func(ptr, 0, len);
}