Created
May 30, 2017 04:48
-
-
Save KyCodeHuynh/41362440575d1e22eec013646675f295 to your computer and use it in GitHub Desktop.
How OpenSSL prevents memset() from being optimized out
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* 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