Bitcoin Core
0.21.1
P2P Digital Currency
Main Page
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Modules
src
support
cleanse.cpp
Go to the documentation of this file.
1
// Copyright (c) 2009-2010 Satoshi Nakamoto
2
// Copyright (c) 2009-2019 The Bitcoin Core developers
3
// Distributed under the MIT software license, see the accompanying
4
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
6
#include <
support/cleanse.h
>
7
8
#include <cstring>
9
10
#if defined(_MSC_VER)
11
#include <Windows.h>
// For SecureZeroMemory.
12
#endif
13
14
void
memory_cleanse
(
void
*ptr,
size_t
len)
15
{
16
#if defined(_MSC_VER)
17
/* SecureZeroMemory is guaranteed not to be optimized out by MSVC. */
18
SecureZeroMemory(ptr, len);
19
#else
20
std::memset(ptr, 0, len);
21
22
/* Memory barrier that scares the compiler away from optimizing out the memset.
23
*
24
* Quoting Adam Langley <agl@google.com> in commit ad1907fe73334d6c696c8539646c21b11178f20f
25
* in BoringSSL (ISC License):
26
* As best as we can tell, this is sufficient to break any optimisations that
27
* might try to eliminate "superfluous" memsets.
28
* This method is used in memzero_explicit() the Linux kernel, too. Its advantage is that it
29
* is pretty efficient because the compiler can still implement the memset() efficiently,
30
* just not remove it entirely. See "Dead Store Elimination (Still) Considered Harmful" by
31
* Yang et al. (USENIX Security 2017) for more background.
32
*/
33
__asm__ __volatile__(
""
: :
"r"
(ptr) :
"memory"
);
34
#endif
35
}
memory_cleanse
void memory_cleanse(void *ptr, size_t len)
Secure overwrite a buffer (possibly containing secret data) with zero-bytes.
Definition:
cleanse.cpp:14
cleanse.h
Generated on Fri Apr 30 2021 13:53:46 for Bitcoin Core by
1.8.8