From 59b919822ab060f721e235964d19b55a19c815f0 Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Mon, 2 Feb 2015 10:00:45 -0500 Subject: [PATCH] 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 --- contrib/pgcrypto/random.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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);