We need a portable way of safely zero-ing out a buffer.
We're adding ceph_memzero_s, which will use one of the
following functions, dependning which one is available:
memset_s, SecureZeroMemory and explicit_bzero.
Signed-off-by: Lucian Petrut <lpetrut@cloudbasesolutions.com>
#endif
}
+int ceph_memzero_s(void *dest, size_t destsz, size_t count) {
+#ifdef __STDC_LIB_EXT1__
+ return memset_s(dest, destsz, 0, count);
+#elif defined(_WIN32)
+ SecureZeroMemory(dest, count);
+#else
+ explicit_bzero(dest, count);
+#endif
+ return 0;
+}
+
#ifdef _WIN32
#include <iomanip>
char *ceph_strerror_r(int errnum, char *buf, size_t buflen);
unsigned get_page_size();
+int ceph_memzero_s(void *dest, size_t destsz, size_t count);
+
#ifdef __cplusplus
}
#endif
#include <openssl/err.h>
#include <string.h>
#include "include/ceph_assert.h"
+#include "include/compat.h"
namespace librbd {
namespace crypto {
DataCryptor::~DataCryptor() {
if (m_key != nullptr) {
- explicit_bzero(m_key, EVP_CIPHER_key_length(m_cipher));
+ ceph_memzero_s(m_key, EVP_CIPHER_key_length(m_cipher),
+ EVP_CIPHER_key_length(m_cipher));
delete m_key;
m_key = nullptr;
}