Backport OpenSSL 3.2 fix from upstream master
https://git.postgresql.org/gitweb/?p=postgresql.git;h=b2b1f12882fb561c7d474b834044dd8ed570bfea
This commit is contained in:
parent
e7a8590fe3
commit
7831b20fe3
@ -4,7 +4,7 @@
|
|||||||
Summary: PostgreSQL client library
|
Summary: PostgreSQL client library
|
||||||
Name: libpq
|
Name: libpq
|
||||||
Version: %{majorversion}.1
|
Version: %{majorversion}.1
|
||||||
Release: 3%{?dist}
|
Release: 4%{?dist}
|
||||||
|
|
||||||
License: PostgreSQL
|
License: PostgreSQL
|
||||||
Url: http://www.postgresql.org/
|
Url: http://www.postgresql.org/
|
||||||
@ -17,6 +17,7 @@ Source1: https://ftp.postgresql.org/pub/source/v%{version}/postgresql-%{version}
|
|||||||
Patch1: libpq-10.3-rpm-pgsql.patch
|
Patch1: libpq-10.3-rpm-pgsql.patch
|
||||||
Patch2: libpq-10.3-var-run-socket.patch
|
Patch2: libpq-10.3-var-run-socket.patch
|
||||||
Patch3: libpq-12.1-symbol-versioning.patch
|
Patch3: libpq-12.1-symbol-versioning.patch
|
||||||
|
Patch4: postgresql-openssl32.patch
|
||||||
|
|
||||||
BuildRequires: gcc
|
BuildRequires: gcc
|
||||||
BuildRequires: glibc-devel bison flex gawk
|
BuildRequires: glibc-devel bison flex gawk
|
||||||
@ -131,6 +132,9 @@ find_lang_bins %name-devel.lst pg_config
|
|||||||
%_libdir/pkgconfig/libpq.pc
|
%_libdir/pkgconfig/libpq.pc
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Feb 20 2024 Yaakov Selkowitz <yselkowi@redhat.com> - 16.1-4
|
||||||
|
- Backport OpenSSL 3.2 fix from upstream master
|
||||||
|
|
||||||
* Thu Jan 25 2024 Fedora Release Engineering <releng@fedoraproject.org> - 16.1-3
|
* Thu Jan 25 2024 Fedora Release Engineering <releng@fedoraproject.org> - 16.1-3
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
||||||
|
|
||||||
|
142
postgresql-openssl32.patch
Normal file
142
postgresql-openssl32.patch
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
Backport of commit b2b1f12882fb561c7d474b834044dd8ed570bfea to 16.1
|
||||||
|
|
||||||
|
Use BIO_{get,set}_app_data instead of BIO_{get,set}_data.
|
||||||
|
|
||||||
|
We should have done it this way all along, but we accidentally got
|
||||||
|
away with using the wrong BIO field up until OpenSSL 3.2. There,
|
||||||
|
the library's BIO routines that we rely on use the "data" field
|
||||||
|
for their own purposes, and our conflicting use causes assorted
|
||||||
|
weird behaviors up to and including core dumps when SSL connections
|
||||||
|
are attempted. Switch to using the approved field for the purpose,
|
||||||
|
i.e. app_data.
|
||||||
|
|
||||||
|
While at it, remove our configure probes for BIO_get_data as well
|
||||||
|
as the fallback implementation. BIO_{get,set}_app_data have been
|
||||||
|
there since long before any OpenSSL version that we still support,
|
||||||
|
even in the back branches.
|
||||||
|
|
||||||
|
Also, update src/test/ssl/t/001_ssltests.pl to allow for a minor
|
||||||
|
change in an error message spelling that evidently came in with 3.2.
|
||||||
|
|
||||||
|
Tristan Partin and Bo Andreson. Back-patch to all supported branches.
|
||||||
|
|
||||||
|
Discussion: https://postgr.es/m/CAN55FZ1eDDYsYaL7mv+oSLUij2h_u6hvD4Qmv-7PK7jkji0uyQ@mail.gmail.com
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/src/backend/libpq/be-secure-openssl.c b/src/backend/libpq/be-secure-openssl.c
|
||||||
|
index 31b6a6eacdf0..1b8b32c5b39e 100644
|
||||||
|
--- a/src/backend/libpq/be-secure-openssl.c
|
||||||
|
+++ b/src/backend/libpq/be-secure-openssl.c
|
||||||
|
@@ -842,11 +842,6 @@ be_tls_write(Port *port, void *ptr, size_t len, int *waitfor)
|
||||||
|
* to retry; do we need to adopt their logic for that?
|
||||||
|
*/
|
||||||
|
|
||||||
|
-#ifndef HAVE_BIO_GET_DATA
|
||||||
|
-#define BIO_get_data(bio) (bio->ptr)
|
||||||
|
-#define BIO_set_data(bio, data) (bio->ptr = data)
|
||||||
|
-#endif
|
||||||
|
-
|
||||||
|
static BIO_METHOD *my_bio_methods = NULL;
|
||||||
|
|
||||||
|
static int
|
||||||
|
@@ -856,7 +851,7 @@ my_sock_read(BIO *h, char *buf, int size)
|
||||||
|
|
||||||
|
if (buf != NULL)
|
||||||
|
{
|
||||||
|
- res = secure_raw_read(((Port *) BIO_get_data(h)), buf, size);
|
||||||
|
+ res = secure_raw_read(((Port *) BIO_get_app_data(h)), buf, size);
|
||||||
|
BIO_clear_retry_flags(h);
|
||||||
|
if (res <= 0)
|
||||||
|
{
|
||||||
|
@@ -876,7 +871,7 @@ my_sock_write(BIO *h, const char *buf, int size)
|
||||||
|
{
|
||||||
|
int res = 0;
|
||||||
|
|
||||||
|
- res = secure_raw_write(((Port *) BIO_get_data(h)), buf, size);
|
||||||
|
+ res = secure_raw_write(((Port *) BIO_get_app_data(h)), buf, size);
|
||||||
|
BIO_clear_retry_flags(h);
|
||||||
|
if (res <= 0)
|
||||||
|
{
|
||||||
|
@@ -952,7 +947,7 @@ my_SSL_set_fd(Port *port, int fd)
|
||||||
|
SSLerr(SSL_F_SSL_SET_FD, ERR_R_BUF_LIB);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
- BIO_set_data(bio, port);
|
||||||
|
+ BIO_set_app_data(bio, port);
|
||||||
|
|
||||||
|
BIO_set_fd(bio, fd, BIO_NOCLOSE);
|
||||||
|
SSL_set_bio(port->ssl, bio, bio);
|
||||||
|
diff --git a/src/interfaces/libpq/fe-secure-openssl.c b/src/interfaces/libpq/fe-secure-openssl.c
|
||||||
|
index 4aeaf08312ce..e669bdbf1d2d 100644
|
||||||
|
--- a/src/interfaces/libpq/fe-secure-openssl.c
|
||||||
|
+++ b/src/interfaces/libpq/fe-secure-openssl.c
|
||||||
|
@@ -1815,11 +1815,6 @@ PQsslAttribute(PGconn *conn, const char *attribute_name)
|
||||||
|
* to retry; do we need to adopt their logic for that?
|
||||||
|
*/
|
||||||
|
|
||||||
|
-#ifndef HAVE_BIO_GET_DATA
|
||||||
|
-#define BIO_get_data(bio) (bio->ptr)
|
||||||
|
-#define BIO_set_data(bio, data) (bio->ptr = data)
|
||||||
|
-#endif
|
||||||
|
-
|
||||||
|
static BIO_METHOD *my_bio_methods;
|
||||||
|
|
||||||
|
static int
|
||||||
|
@@ -1828,7 +1823,7 @@ my_sock_read(BIO *h, char *buf, int size)
|
||||||
|
{
|
||||||
|
int res;
|
||||||
|
|
||||||
|
- res = pqsecure_raw_read((PGconn *) BIO_get_data(h), buf, size);
|
||||||
|
+ res = pqsecure_raw_read((PGconn *) BIO_get_app_data(h), buf, size);
|
||||||
|
BIO_clear_retry_flags(h);
|
||||||
|
if (res < 0)
|
||||||
|
{
|
||||||
|
@@ -1858,7 +1853,7 @@ my_sock_write(BIO *h, const char *buf, int size)
|
||||||
|
{
|
||||||
|
int res;
|
||||||
|
|
||||||
|
- res = pqsecure_raw_write((PGconn *) BIO_get_data(h), buf, size);
|
||||||
|
+ res = pqsecure_raw_write((PGconn *) BIO_get_app_data(h), buf, size);
|
||||||
|
BIO_clear_retry_flags(h);
|
||||||
|
if (res < 0)
|
||||||
|
{
|
||||||
|
@@ -1968,7 +1963,7 @@ my_SSL_set_fd(PGconn *conn, int fd)
|
||||||
|
SSLerr(SSL_F_SSL_SET_FD, ERR_R_BUF_LIB);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
- BIO_set_data(bio, conn);
|
||||||
|
+ BIO_set_app_data(bio, conn);
|
||||||
|
|
||||||
|
SSL_set_bio(conn->ssl, bio, bio);
|
||||||
|
BIO_set_fd(bio, fd, BIO_NOCLOSE);
|
||||||
|
diff --git a/src/test/ssl/t/001_ssltests.pl b/src/test/ssl/t/001_ssltests.pl
|
||||||
|
index a049fd2ff03a..d921f1dde9fa 100644
|
||||||
|
--- a/src/test/ssl/t/001_ssltests.pl
|
||||||
|
+++ b/src/test/ssl/t/001_ssltests.pl
|
||||||
|
@@ -776,7 +776,7 @@ sub switch_server_cert
|
||||||
|
"$common_connstr user=ssltestuser sslcert=ssl/client-revoked.crt "
|
||||||
|
. sslkey('client-revoked.key'),
|
||||||
|
"certificate authorization fails with revoked client cert",
|
||||||
|
- expected_stderr => qr/SSL error: sslv3 alert certificate revoked/,
|
||||||
|
+ expected_stderr => qr|SSL error: ssl[a-z0-9/]* alert certificate revoked|,
|
||||||
|
# temporarily(?) skip this check due to timing issue
|
||||||
|
# log_like => [
|
||||||
|
# qr{Client certificate verification failed at depth 0: certificate revoked},
|
||||||
|
@@ -881,7 +881,7 @@ sub switch_server_cert
|
||||||
|
"$common_connstr user=ssltestuser sslcert=ssl/client-revoked.crt "
|
||||||
|
. sslkey('client-revoked.key'),
|
||||||
|
"certificate authorization fails with revoked client cert with server-side CRL directory",
|
||||||
|
- expected_stderr => qr/SSL error: sslv3 alert certificate revoked/,
|
||||||
|
+ expected_stderr => qr|SSL error: ssl[a-z0-9/]* alert certificate revoked|,
|
||||||
|
# temporarily(?) skip this check due to timing issue
|
||||||
|
# log_like => [
|
||||||
|
# qr{Client certificate verification failed at depth 0: certificate revoked},
|
||||||
|
@@ -894,7 +894,7 @@ sub switch_server_cert
|
||||||
|
"$common_connstr user=ssltestuser sslcert=ssl/client-revoked-utf8.crt "
|
||||||
|
. sslkey('client-revoked-utf8.key'),
|
||||||
|
"certificate authorization fails with revoked UTF-8 client cert with server-side CRL directory",
|
||||||
|
- expected_stderr => qr/SSL error: sslv3 alert certificate revoked/,
|
||||||
|
+ expected_stderr => qr|SSL error: ssl[a-z0-9/]* alert certificate revoked|,
|
||||||
|
# temporarily(?) skip this check due to timing issue
|
||||||
|
# log_like => [
|
||||||
|
# qr{Client certificate verification failed at depth 0: certificate revoked},
|
Loading…
Reference in New Issue
Block a user