Commit 104ce8a9 authored by Rich Salz's avatar Rich Salz Committed by Rich Salz
Browse files

RT4116: Change cleanse to just memset

parent 380f18ed
Loading
Loading
Loading
Loading
+9 −16
Original line number Diff line number Diff line
@@ -59,23 +59,16 @@
#include <string.h>
#include <openssl/crypto.h>

extern unsigned char cleanse_ctr;
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);
}