Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 31f860a

Browse files
Set type identifier on BIO
In OpenSSL there are two types of BIO's (I/O abstractions): source/sink and filters. A source/sink BIO is a source and/or sink of data, ie one acting on a socket or a file. A filter BIO takes a stream of input from another BIO and transforms it. In order for BIO_find_type() to be able to traverse the chain of BIO's and correctly find all BIO's of a certain type they shall have the type bit set accordingly, source/sink BIO's (what PostgreSQL implements) use BIO_TYPE_SOURCE_SINK and filter BIO's use BIO_TYPE_FILTER. In addition to these, file descriptor based BIO's should have the descriptor bit set, BIO_TYPE_DESCRIPTOR. The PostgreSQL implementation didn't set the type bits, which went unnoticed for a long time as it's only really relevant for code auditing the OpenSSL installation, or doing similar tasks. It is required by the API though, so this fixes it. Backpatch through 9.6 as this has been wrong for a long time. Author: Itamar Gafni Discussion: https://postgr.es/m/SN6PR06MB39665EC10C34BB20956AE4578AF39@SN6PR06MB3966.namprd06.prod.outlook.com Backpatch-through: 9.6
1 parent e9a79c2 commit 31f860a

File tree

2 files changed

+2
-0
lines changed

2 files changed

+2
-0
lines changed

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

+1
Original file line numberDiff line numberDiff line change
@@ -883,6 +883,7 @@ my_BIO_s_socket(void)
883883
my_bio_index = BIO_get_new_index();
884884
if (my_bio_index == -1)
885885
return NULL;
886+
my_bio_index |= (BIO_TYPE_DESCRIPTOR | BIO_TYPE_SOURCE_SINK);
886887
my_bio_methods = BIO_meth_new(my_bio_index, "PostgreSQL backend socket");
887888
if (!my_bio_methods)
888889
return NULL;

src/interfaces/libpq/fe-secure-openssl.c

+1
Original file line numberDiff line numberDiff line change
@@ -1706,6 +1706,7 @@ my_BIO_s_socket(void)
17061706
my_bio_index = BIO_get_new_index();
17071707
if (my_bio_index == -1)
17081708
return NULL;
1709+
my_bio_index |= (BIO_TYPE_DESCRIPTOR | BIO_TYPE_SOURCE_SINK);
17091710
my_bio_methods = BIO_meth_new(my_bio_index, "libpq socket");
17101711
if (!my_bio_methods)
17111712
return NULL;

0 commit comments

Comments
 (0)