From 59d496ab0cca1a1608d15344ebe072b0e360afb3 Mon Sep 17 00:00:00 2001 From: ashamedbit Date: Sun, 31 Aug 2025 20:05:23 +0200 Subject: [PATCH] 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 Signed-off-by: Christian Brabandt --- src/crypt.c | 13 +++++++++---- src/version.c | 2 ++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/crypt.c b/src/crypt.c index 55edd6c6de..3063afdff1 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 2ce3628bf1..042b995aac 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, /**/