commit adeb789: [Minor] Add a memory erasing allocator
Vsevolod Stakhov
vsevolod at rspamd.com
Mon Jun 6 20:49:04 UTC 2022
Author: Vsevolod Stakhov
Date: 2022-06-06 21:42:09 +0100
URL: https://github.com/rspamd/rspamd/commit/adeb78949c10dd6bedff71cc5530e9505a7a4c63
[Minor] Add a memory erasing allocator
---
src/libutil/cxx/util.hxx | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/src/libutil/cxx/util.hxx b/src/libutil/cxx/util.hxx
index 0df3349a3..2e0308bd2 100644
--- a/src/libutil/cxx/util.hxx
+++ b/src/libutil/cxx/util.hxx
@@ -129,6 +129,27 @@ constexpr auto enumerate(T && iterable)
return iterable_wrapper{ std::forward<T>(iterable) };
}
+/**
+ * Allocator that cleans up memory in a secure way on destruction
+ * @tparam T
+ */
+template <class T> class secure_mem_allocator : public std::allocator<T>
+{
+public:
+ using pointer = typename std::allocator<T>::pointer;
+ using size_type = typename std::allocator<T>::size_type;
+ template<class U> struct rebind { typedef secure_mem_allocator<U> other; };
+ secure_mem_allocator() noexcept = default;
+ secure_mem_allocator(const secure_mem_allocator &) noexcept {}
+ template <class U> explicit secure_mem_allocator(const secure_mem_allocator<U>&) noexcept {}
+
+ void deallocate(pointer p, size_type num) noexcept {
+ rspamd_explicit_memzero((void *)p, num);
+ std::allocator<T>::deallocate(p, num);
+ }
+};
+
+
}
#endif //RSPAMD_UTIL_HXX
More information about the Commits
mailing list