Skip to content

Instantly share code, notes, and snippets.

@KyCodeHuynh
Created May 30, 2017 04:48
Show Gist options
  • Save KyCodeHuynh/41362440575d1e22eec013646675f295 to your computer and use it in GitHub Desktop.
Save KyCodeHuynh/41362440575d1e22eec013646675f295 to your computer and use it in GitHub Desktop.
How OpenSSL prevents memset() from being optimized out
/* Original: https://github.com/openssl/openssl/blob/2bcb232ebeb155c6f1241deb84a26ab23176f866/crypto/mem_clr.c */
/*
* Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
* in the file LICENSE in the source distribution or at
* https://www.openssl.org/source/license.html
*/
#include <string.h>
#include <openssl/crypto.h>
/*
* 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)
{
memset_func(ptr, 0, len);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment