mirror of
https://github.com/postgres/postgres.git
synced 2025-07-15 19:21:59 +03:00
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
This commit is contained in:
@ -3885,7 +3885,10 @@ freePGconn(PGconn *conn)
|
||||
if (conn->connhost[i].port != NULL)
|
||||
free(conn->connhost[i].port);
|
||||
if (conn->connhost[i].password != NULL)
|
||||
{
|
||||
explicit_bzero(conn->connhost[i].password, strlen(conn->connhost[i].password));
|
||||
free(conn->connhost[i].password);
|
||||
}
|
||||
}
|
||||
free(conn->connhost);
|
||||
}
|
||||
@ -3919,7 +3922,10 @@ freePGconn(PGconn *conn)
|
||||
if (conn->pguser)
|
||||
free(conn->pguser);
|
||||
if (conn->pgpass)
|
||||
{
|
||||
explicit_bzero(conn->pgpass, strlen(conn->pgpass));
|
||||
free(conn->pgpass);
|
||||
}
|
||||
if (conn->pgpassfile)
|
||||
free(conn->pgpassfile);
|
||||
if (conn->keepalives)
|
||||
@ -6931,6 +6937,7 @@ passwordFromFile(const char *hostname, const char *port, const char *dbname,
|
||||
if (!ret)
|
||||
{
|
||||
/* Out of memory. XXX: an error message would be nice. */
|
||||
explicit_bzero(buf, sizeof(buf));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -6947,6 +6954,7 @@ passwordFromFile(const char *hostname, const char *port, const char *dbname,
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
explicit_bzero(buf, sizeof(buf));
|
||||
return NULL;
|
||||
|
||||
#undef LINELEN
|
||||
|
Reference in New Issue
Block a user