summaryrefslogtreecommitdiff
path: root/openbsd-compat/explicit_bzero.c
diff options
context:
space:
mode:
Diffstat (limited to 'openbsd-compat/explicit_bzero.c')
-rw-r--r--openbsd-compat/explicit_bzero.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/openbsd-compat/explicit_bzero.c b/openbsd-compat/explicit_bzero.c
index 3c85a4843a47..5078134d137a 100644
--- a/openbsd-compat/explicit_bzero.c
+++ b/openbsd-compat/explicit_bzero.c
@@ -7,6 +7,8 @@
#include "includes.h"
+#include <string.h>
+
/*
* explicit_bzero - don't let the compiler optimize away bzero
*/
@@ -32,6 +34,17 @@ static void (* volatile ssh_bzero)(void *, size_t) = bzero;
void
explicit_bzero(void *p, size_t n)
{
+ /*
+ * clang -fsanitize=memory needs to intercept memset-like functions
+ * to correctly detect memory initialisation. Make sure one is called
+ * directly since our indirection trick above sucessfully confuses it.
+ */
+#if defined(__has_feature)
+# if __has_feature(memory_sanitizer)
+ memset(p, 0, n);
+# endif
+#endif
+
ssh_bzero(p, n);
}