Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 5f3aa30

Browse filesBrowse files
Avoid potential pfree on NULL on OpenSSL errors
Guard against the pointer being NULL before pfreeing upon an error returned from OpenSSL. Also handle errors from X509_NAME_print_ex which can return -1 on memory allocation errors. Backpatch down to v15 where the code was added. Author: Sergey Shinderuk <s.shinderuk@postgrespro.ru> Discussion: https://postgr.es/m/8db5374d-32e0-6abb-d402-40762511eff2@postgrespro.ru Backpatch-through: v15
1 parent e59fcbd commit 5f3aa30
Copy full SHA for 5f3aa30

File tree

Expand file treeCollapse file tree

1 file changed

+17
-8
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+17
-8
lines changed

‎src/backend/libpq/be-secure-openssl.c

Copy file name to clipboardExpand all lines: src/backend/libpq/be-secure-openssl.c
+17-8Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -620,8 +620,11 @@ be_tls_open_server(Port *port)
620620
bio = BIO_new(BIO_s_mem());
621621
if (!bio)
622622
{
623-
pfree(port->peer_cn);
624-
port->peer_cn = NULL;
623+
if (port->peer_cn != NULL)
624+
{
625+
pfree(port->peer_cn);
626+
port->peer_cn = NULL;
627+
}
625628
return -1;
626629
}
627630

@@ -632,12 +635,15 @@ be_tls_open_server(Port *port)
632635
* which make regular expression matching a bit easier. Also note that
633636
* it prints the Subject fields in reverse order.
634637
*/
635-
X509_NAME_print_ex(bio, x509name, 0, XN_FLAG_RFC2253);
636-
if (BIO_get_mem_ptr(bio, &bio_buf) <= 0)
638+
if (X509_NAME_print_ex(bio, x509name, 0, XN_FLAG_RFC2253) == -1 ||
639+
BIO_get_mem_ptr(bio, &bio_buf) <= 0)
637640
{
638641
BIO_free(bio);
639-
pfree(port->peer_cn);
640-
port->peer_cn = NULL;
642+
if (port->peer_cn != NULL)
643+
{
644+
pfree(port->peer_cn);
645+
port->peer_cn = NULL;
646+
}
641647
return -1;
642648
}
643649
peer_dn = MemoryContextAlloc(TopMemoryContext, bio_buf->length + 1);
@@ -651,8 +657,11 @@ be_tls_open_server(Port *port)
651657
(errcode(ERRCODE_PROTOCOL_VIOLATION),
652658
errmsg("SSL certificate's distinguished name contains embedded null")));
653659
pfree(peer_dn);
654-
pfree(port->peer_cn);
655-
port->peer_cn = NULL;
660+
if (port->peer_cn != NULL)
661+
{
662+
pfree(port->peer_cn);
663+
port->peer_cn = NULL;
664+
}
656665
return -1;
657666
}
658667

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.