From: Noah Misch Date: Mon, 2 Feb 2015 15:00:45 +0000 (-0500) Subject: Prevent Valgrind Memcheck errors around px_acquire_system_randomness(). X-Git-Tag: REL9_4_1~3 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ca84dfa90e9929737bda7393f88b488cb7161147;p=postgresql Prevent Valgrind Memcheck errors around px_acquire_system_randomness(). This function uses uninitialized stack and heap buffers as supplementary entropy sources. Mark them so Memcheck will not complain. Back-patch to 9.4, where Valgrind Memcheck cooperation first appeared. Marko Tiikkaja --- diff --git a/contrib/pgcrypto/random.c b/contrib/pgcrypto/random.c index 3f092ca346..d72679e412 100644 --- a/contrib/pgcrypto/random.c +++ b/contrib/pgcrypto/random.c @@ -32,6 +32,7 @@ #include "postgres.h" #include "px.h" +#include "utils/memdebug.h" /* how many bytes to ask from system random provider */ #define RND_BYTES 32 @@ -195,7 +196,7 @@ try_unix_std(uint8 *dst) memcpy(dst, (uint8 *) &x, sizeof(x)); dst += sizeof(x); - /* let's be desperate */ + /* hash of uninitialized stack and heap allocations */ res = px_find_digest("sha1", &md); if (res >= 0) { @@ -203,8 +204,10 @@ try_unix_std(uint8 *dst) uint8 stack[8192]; int alloc = 32 * 1024; + VALGRIND_MAKE_MEM_DEFINED(stack, sizeof(stack)); px_md_update(md, stack, sizeof(stack)); ptr = px_alloc(alloc); + VALGRIND_MAKE_MEM_DEFINED(ptr, alloc); px_md_update(md, ptr, alloc); px_free(ptr);