Bitcoin Core
28.99.0
P2P Digital Currency
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(WIN32)
11
#include <windows.h>
12
#endif
13
14
void
memory_cleanse
(
void
*ptr,
size_t
len)
15
{
16
#if defined(WIN32)
17
/* SecureZeroMemory is guaranteed not to be optimized out. */
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 Wed Dec 18 2024 20:00:12 for Bitcoin Core by
1.9.4