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