From adeb78949c10dd6bedff71cc5530e9505a7a4c63 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Mon, 6 Jun 2022 21:42:09 +0100 Subject: [PATCH] [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(iterable) }; } +/** + * Allocator that cleans up memory in a secure way on destruction + * @tparam T + */ +template class secure_mem_allocator : public std::allocator +{ +public: + using pointer = typename std::allocator::pointer; + using size_type = typename std::allocator::size_type; + template struct rebind { typedef secure_mem_allocator other; }; + secure_mem_allocator() noexcept = default; + secure_mem_allocator(const secure_mem_allocator &) noexcept {} + template explicit secure_mem_allocator(const secure_mem_allocator&) noexcept {} + + void deallocate(pointer p, size_type num) noexcept { + rspamd_explicit_memzero((void *)p, num); + std::allocator::deallocate(p, num); + } +}; + + } #endif //RSPAMD_UTIL_HXX -- 2.39.5