Commit: patch 9.1.1722: compiler may optimize away clearing of crypt key

2 views
Skip to first unread message

Christian Brabandt

unread,
Aug 31, 2025, 2:15:14 PMAug 31
to vim...@googlegroups.com
patch 9.1.1722: compiler may optimize away clearing of crypt key

Commit: https://github.com/vim/vim/commit/59d496ab0cca1a1608d15344ebe072b0e360afb3
Author: ashamedbit <muralian...@gmail.com>
Date: Sun Aug 31 20:05:23 2025 +0200

patch 9.1.1722: compiler may optimize away clearing of crypt key

Problem: Compiler may optimize away clearing of crypt key
Solution: Use sodium_memzero() if available, else use memset() using a
volatile function pointer (ashamedbit).

closes: #18173

Signed-off-by: ashamedbit <muralian...@gmail.com>
Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/src/crypt.c b/src/crypt.c
index 55edd6c6d..3063afdff 100644
--- a/src/crypt.c
+++ b/src/crypt.c
@@ -780,12 +780,17 @@ crypt_decode_inplace(
void
crypt_free_key(char_u *key)
{
- char_u *p;
-
+ // Create a safe memset which cannot be optimized away by compiler
+ static void *(* volatile vim_memset_safe)(void *s, int c, size_t n) =
+ memset;
if (key != NULL)
{
- for (p = key; *p != NUL; ++p)
- *p = 0;
+#ifdef FEAT_SODIUM
+ if (sodium_init() >= 0)
+ sodium_memzero(key, STRLEN(key));
+ else
+#endif
+ vim_memset_safe(key, 0, STRLEN(key));
vim_free(key);
}
}
diff --git a/src/version.c b/src/version.c
index 2ce3628bf..042b995aa 100644
--- a/src/version.c
+++ b/src/version.c
@@ -724,6 +724,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 1722,
/**/
1721,
/**/
Reply all
Reply to author
Forward
0 new messages