From 9a842ec4192ea0cdd4d4e6b6ca45aff09195c64c Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 9 Jan 2021 20:04:18 +0100 Subject: [PATCH] LibC: Add explicit_bzero() This is a variant of bzero() that is guaranteed to not get optimized away by the compiler. Useful for clearing out sensitive data. --- Libraries/LibC/string.cpp | 7 +++++++ Libraries/LibC/string.h | 1 + 2 files changed, 8 insertions(+) diff --git a/Libraries/LibC/string.cpp b/Libraries/LibC/string.cpp index 8daee4ef49..86a72b72a9 100644 --- a/Libraries/LibC/string.cpp +++ b/Libraries/LibC/string.cpp @@ -476,4 +476,11 @@ size_t strxfrm(char* dest, const char* src, size_t n) dest[i] = '\0'; return i; } + +void explicit_bzero(void* ptr, size_t size) +{ + memset(ptr, 0, size); + asm volatile("" :: + : "memory"); +} } diff --git a/Libraries/LibC/string.h b/Libraries/LibC/string.h index f181477ef3..40a2aabe7d 100644 --- a/Libraries/LibC/string.h +++ b/Libraries/LibC/string.h @@ -44,6 +44,7 @@ void* memchr(const void*, int c, size_t); const void* memmem(const void* haystack, size_t, const void* needle, size_t); void* memset(void*, int, size_t); +void explicit_bzero(void*, size_t) __attribute__((nonnull(1))); __attribute__((malloc)) char* strdup(const char*); __attribute__((malloc)) char* strndup(const char*, size_t);