DEFINE_STACK_OF(ASN1_UTF8STRING) moved from ts_lcl.h to asn1.h
[openssl.git] / crypto / mem_clr.c
index e4b7f540b0bd12dd03608b52e8214332cb1a8b72..3389919d5fd4fb06ce500d380d5dc572a9906d50 100644 (file)
@@ -1,6 +1,6 @@
-/* crypto/mem_clr.c -*- mode:C; c-file-style: "eay" -*- */
-/* Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL
- * project 2002.
+/*
+ * Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL project
+ * 2002.
  */
 /* ====================================================================
  * Copyright (c) 2001 The OpenSSL Project.  All rights reserved.
@@ -10,7 +10,7 @@
  * are met:
  *
  * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer. 
+ *    notice, this list of conditions and the following disclaimer.
  *
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in
 #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;
-       while(loop--)
-               {
-               *(p++) = cleanse_ctr;
-               cleanse_ctr += (17 + (unsigned char)((int)p & 0xF));
-               }
-       if(memchr(ptr, cleanse_ctr, len))
-               cleanse_ctr += 63;
-       }
+{
+    memset_func(ptr, 0, len);
+}