From 27a124f7d88a9c59650b4881b95b166de887f055 Mon Sep 17 00:00:00 2001 From: Brian Gianforcaro Date: Sat, 11 Sep 2021 09:49:47 -0700 Subject: [PATCH] LibCrypto: Use explicit_bzero instead of memset to zero 'secure data' PVS-Studio flagged this, as memset can be optimized away by the compiler in some cases. We obviously don't want that to ever happen so make sure to always use `explicit_bzero(..)` which can't be optimized away. --- Userland/Libraries/LibCrypto/Hash/MD5.cpp | 3 ++- Userland/Libraries/LibCrypto/Hash/SHA1.cpp | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibCrypto/Hash/MD5.cpp b/Userland/Libraries/LibCrypto/Hash/MD5.cpp index c526bb80000..de4d529882b 100644 --- a/Userland/Libraries/LibCrypto/Hash/MD5.cpp +++ b/Userland/Libraries/LibCrypto/Hash/MD5.cpp @@ -6,6 +6,7 @@ #include #include +#include static constexpr u32 F(u32 x, u32 y, u32 z) { return (x & y) | ((~x) & z); }; static constexpr u32 G(u32 x, u32 y, u32 z) { return (x & z) | ((~z) & y); }; @@ -199,7 +200,7 @@ void MD5::transform(const u8* block) m_C += c; m_D += d; - __builtin_memset(x, 0, sizeof(x)); + explicit_bzero(x, sizeof(x)); } } diff --git a/Userland/Libraries/LibCrypto/Hash/SHA1.cpp b/Userland/Libraries/LibCrypto/Hash/SHA1.cpp index 9d6147687c6..58b1db96e45 100644 --- a/Userland/Libraries/LibCrypto/Hash/SHA1.cpp +++ b/Userland/Libraries/LibCrypto/Hash/SHA1.cpp @@ -7,6 +7,7 @@ #include #include #include +#include namespace Crypto { namespace Hash { @@ -63,7 +64,7 @@ inline void SHA1::transform(const u8* data) c = 0; d = 0; e = 0; - __builtin_memset(blocks, 0, 16 * sizeof(u32)); + explicit_bzero(blocks, 16 * sizeof(u32)); } void SHA1::update(const u8* message, size_t length)