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

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