diff options
author | Peter Eisentraut <peter@eisentraut.org> | 2019-09-05 08:15:58 +0200 |
---|---|---|
committer | Peter Eisentraut <peter@eisentraut.org> | 2019-09-05 08:30:42 +0200 |
commit | 74a308cf5221f491776fcdb4dc36eb61678dbc6f (patch) | |
tree | c2e9a146616d9b40dcd606db4030abcd1b1fe25b /src/backend/libpq/be-secure-common.c | |
parent | ae060a52b2881ea842f596fa78b8d09f9a91b149 (diff) | |
download | postgresql-74a308cf5221f491776fcdb4dc36eb61678dbc6f.tar.gz postgresql-74a308cf5221f491776fcdb4dc36eb61678dbc6f.zip |
Use explicit_bzero
Use the explicit_bzero() function in places where it is important that
security information such as passwords is cleared from memory. There
might be other places where it could be useful; this is just an
initial collection.
For platforms that don't have explicit_bzero(), provide various
fallback implementations. (explicit_bzero() itself isn't standard,
but as Linux/glibc, FreeBSD, and OpenBSD have it, it's the most common
spelling, so it makes sense to make that the invocation point.)
Discussion: https://www.postgresql.org/message-id/flat/42d26bde-5d5b-c90d-87ae-6cab875f73be%402ndquadrant.com
Diffstat (limited to 'src/backend/libpq/be-secure-common.c')
-rw-r--r-- | src/backend/libpq/be-secure-common.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/backend/libpq/be-secure-common.c b/src/backend/libpq/be-secure-common.c index e8f27bc7825..d801929ea28 100644 --- a/src/backend/libpq/be-secure-common.c +++ b/src/backend/libpq/be-secure-common.c @@ -87,6 +87,7 @@ run_ssl_passphrase_command(const char *prompt, bool is_server_start, char *buf, { if (ferror(fh)) { + explicit_bzero(buf, size); ereport(loglevel, (errcode_for_file_access(), errmsg("could not read from command \"%s\": %m", @@ -98,6 +99,7 @@ run_ssl_passphrase_command(const char *prompt, bool is_server_start, char *buf, pclose_rc = ClosePipeStream(fh); if (pclose_rc == -1) { + explicit_bzero(buf, size); ereport(loglevel, (errcode_for_file_access(), errmsg("could not close pipe to external command: %m"))); @@ -105,6 +107,7 @@ run_ssl_passphrase_command(const char *prompt, bool is_server_start, char *buf, } else if (pclose_rc != 0) { + explicit_bzero(buf, size); ereport(loglevel, (errcode_for_file_access(), errmsg("command \"%s\" failed", |