Blame SOURCES/cryptsetup-2.4.2-Do-not-try-to-set-compiler-optimization-flag-if-wipe.patch

b7e6af
From a76310b53fbb117e620f2c37350b68dd267f1088 Mon Sep 17 00:00:00 2001
b7e6af
From: Milan Broz <gmazyland@gmail.com>
b7e6af
Date: Mon, 20 Sep 2021 17:42:20 +0200
b7e6af
Subject: [PATCH 1/7] Do not try to set compiler optimization flag if wipe is
b7e6af
 implemented in libc.
b7e6af
b7e6af
If zeroing memory is implemented through libc call (like memset_bzero),
b7e6af
compiler should never remove such call. It is not needed to set O0
b7e6af
optimization flag explicitly.
b7e6af
b7e6af
Various checkers like annocheck causes problems with these flags,
b7e6af
just remove it where it makes no sense.
b7e6af
b7e6af
(Moreover, we use the same pattern without compiler magic
b7e6af
in crypt_backend_memzero() already.)
b7e6af
---
b7e6af
 lib/crypto_backend/argon2/core.c | 10 ++++++++--
b7e6af
 1 file changed, 8 insertions(+), 2 deletions(-)
b7e6af
b7e6af
diff --git a/lib/crypto_backend/argon2/core.c b/lib/crypto_backend/argon2/core.c
b7e6af
index b204ba98..db9a7741 100644
b7e6af
--- a/lib/crypto_backend/argon2/core.c
b7e6af
+++ b/lib/crypto_backend/argon2/core.c
b7e6af
@@ -120,18 +120,24 @@ void free_memory(const argon2_context *context, uint8_t *memory,
b7e6af
     }
b7e6af
 }
b7e6af
 
b7e6af
-void NOT_OPTIMIZED secure_wipe_memory(void *v, size_t n) {
b7e6af
 #if defined(_MSC_VER) && VC_GE_2005(_MSC_VER)
b7e6af
+void secure_wipe_memory(void *v, size_t n) {
b7e6af
     SecureZeroMemory(v, n);
b7e6af
+}
b7e6af
 #elif defined memset_s
b7e6af
+void secure_wipe_memory(void *v, size_t n) {
b7e6af
     memset_s(v, n, 0, n);
b7e6af
+}
b7e6af
 #elif defined(HAVE_EXPLICIT_BZERO)
b7e6af
+void secure_wipe_memory(void *v, size_t n) {
b7e6af
     explicit_bzero(v, n);
b7e6af
+}
b7e6af
 #else
b7e6af
+void NOT_OPTIMIZED secure_wipe_memory(void *v, size_t n) {
b7e6af
     static void *(*const volatile memset_sec)(void *, int, size_t) = &memset;
b7e6af
     memset_sec(v, 0, n);
b7e6af
-#endif
b7e6af
 }
b7e6af
+#endif
b7e6af
 
b7e6af
 /* Memory clear flag defaults to true. */
b7e6af
 int FLAG_clear_internal_memory = 1;
b7e6af
-- 
b7e6af
2.27.0
b7e6af