QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
SecureMemory.h
Go to the documentation of this file.
1
#pragma once
2
3
#include <QtCore/QByteArray>
4
#include <array>
5
#include <cstddef>
6
#include <cstring>
7
8
#if defined(_WIN32)
9
#include <windows.h>
10
#elif (defined(__linux__) && !defined(__ANDROID__)) || defined(__FreeBSD__)
11
#include <strings.h>
// explicit_bzero (Bionic exposes it only via <string.h>, gated on API; use fallback)
12
#endif
13
14
namespace
QGC
{
15
19
inline
void
secureZero
(
void
* data,
size_t
size)
20
{
21
if
(data ==
nullptr
|| size == 0) {
22
return
;
23
}
24
#if defined(_WIN32)
25
SecureZeroMemory(data, size);
26
#elif (defined(__linux__) && !defined(__ANDROID__)) || defined(__FreeBSD__)
27
explicit_bzero(data, size);
28
#else
29
volatile
unsigned
char
* p =
static_cast<
volatile
unsigned
char
*
>
(data);
30
for
(
size_t
i = 0; i < size; ++i) {
31
p[i] = 0;
32
}
33
// Memory barrier prevents the optimizer from coalescing writes with later allocator reuse.
34
asm
volatile
(
""
:::
"memory"
);
35
#endif
36
}
37
40
inline
void
secureZero
(QByteArray& data)
41
{
42
if
(!data.isEmpty()) {
43
secureZero
(data.data(),
static_cast<
size_t
>
(data.size()));
44
}
45
data.clear();
46
}
47
48
template
<
typename
T,
size_t
N>
49
inline
void
secureZero
(std::array<T, N>& arr)
50
{
51
secureZero
(arr.data(), arr.size() *
sizeof
(T));
52
}
53
54
}
// namespace QGC
QGC
Definition
AppMessages.cc:7
QGC::secureZero
void secureZero(void *data, size_t size)
Definition
SecureMemory.h:19
src
Utilities
Memory
SecureMemory.h
Generated by
1.9.8