From 0dbcb7b8492612f1b9e5f08ab8e52de0b09a15cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= Date: Fri, 17 Aug 2018 13:15:59 +0200 Subject: [PATCH] Revert retry in Net::SSLeay::write_partial() --- ..._WANT_WRITE-retry-from_write_partial.patch | 70 +++++++++++++++++++ perl-Net-SSLeay.spec | 8 ++- 2 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 Net-SSLeay-1.85-Move-SSL_ERROR_WANT_READ-SSL_ERROR_WANT_WRITE-retry-from_write_partial.patch diff --git a/Net-SSLeay-1.85-Move-SSL_ERROR_WANT_READ-SSL_ERROR_WANT_WRITE-retry-from_write_partial.patch b/Net-SSLeay-1.85-Move-SSL_ERROR_WANT_READ-SSL_ERROR_WANT_WRITE-retry-from_write_partial.patch new file mode 100644 index 0000000..2f8a1d2 --- /dev/null +++ b/Net-SSLeay-1.85-Move-SSL_ERROR_WANT_READ-SSL_ERROR_WANT_WRITE-retry-from_write_partial.patch @@ -0,0 +1,70 @@ +From 122c80853a9bd66f21699fc79a689b3028d00d3b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Fri, 17 Aug 2018 13:08:44 +0200 +Subject: [PATCH] Move SSL_ERROR_WANT_READ/SSL_ERROR_WANT_WRITE retry from + write_partial() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Original OpenSSL 1.1.1 fix broke IO-Socket-SSL-2.058's t/nonblock.t test +because it tests non-blocking socket operations and expects to see +SSL_ERROR_WANT_WRITE errors and to handle them byt itself. + +This patch purifies Net::SSLeay::write_partial() to behave exactly as +underlying OpenSSL SSL_write() function. The retry is already +presented in Net::SSLeay::ssl_write_all(). + +All applications should implement the retry themsleves or use +ssl_*_all() instead. + +Signed-off-by: Petr Písař +--- + SSLeay.xs | 16 ++-------------- + lib/Net/SSLeay.pod | 3 ++- + 2 files changed, 4 insertions(+), 15 deletions(-) + +diff --git a/SSLeay.xs b/SSLeay.xs +index 7cb6eab..fc7677f 100644 +--- a/SSLeay.xs ++++ b/SSLeay.xs +@@ -2089,20 +2089,8 @@ SSL_write_partial(s,from,count,buf) + if (len < 0) { + croak("from beyound end of buffer"); + RETVAL = -1; +- } else { +- int ret; +- int err; +- +- do { +- ret = SSL_write (s, &(buf[from]), (count<=len)?count:len); +- if (ret > 0) +- break; +- err = SSL_get_error(s, ret); +- if (err != SSL_ERROR_WANT_READ && err != SSL_ERROR_WANT_WRITE) +- break; +- } while (1); +- RETVAL = ret; +- } ++ } else ++ RETVAL = SSL_write (s, &(buf[from]), (count<=len)?count:len); + OUTPUT: + RETVAL + +diff --git a/lib/Net/SSLeay.pod b/lib/Net/SSLeay.pod +index bca7be4..8b5f738 100644 +--- a/lib/Net/SSLeay.pod ++++ b/lib/Net/SSLeay.pod +@@ -4819,7 +4819,8 @@ Check openssl doc L Does not exactly correspond to any low level API function + +-Writes a fragment of data in $data from the buffer $data into the specified $ssl connection. ++Writes a fragment of data in $data from the buffer $data into the specified ++$ssl connection. This is a non-blocking function like L. + + my $rv = Net::SSLeay::write_partial($ssl, $from, $count, $data); + # $ssl - value corresponding to openssl's SSL structure +-- +2.14.4 + diff --git a/perl-Net-SSLeay.spec b/perl-Net-SSLeay.spec index ffa6ecf..16e1ac2 100644 --- a/perl-Net-SSLeay.spec +++ b/perl-Net-SSLeay.spec @@ -9,7 +9,7 @@ Name: perl-Net-SSLeay Version: 1.85 -Release: 6%{?dist} +Release: 7%{?dist} Summary: Perl extension for using OpenSSL License: Artistic 2.0 URL: https://metacpan.org/release/Net-SSLeay @@ -22,6 +22,8 @@ Patch1: Net-SSLeay-1.85-Adapt-CTX_get_min_proto_version-tests-to-system-wide.pa Patch2: Net-SSLeay-1.85-Avoid-SIGPIPE-in-t-local-36_verify.t.patch # Revert retry in Net::SSLeay::{read,write}(), bug #1614884, CPAN RT#125218 Patch3: Net-SSLeay-1.85-Move-SSL_ERROR_WANT_READ-SSL_ERROR_WANT_WRITE-retry-.patch +# Revert retry in Net::SSLeay::write_partial(), bug #1614884, CPAN RT#125218 +Patch4: Net-SSLeay-1.85-Move-SSL_ERROR_WANT_READ-SSL_ERROR_WANT_WRITE-retry-from_write_partial.patch # =========== Module Build =========================== BuildRequires: coreutils BuildRequires: findutils @@ -81,6 +83,7 @@ so you can write servers or clients for more complicated applications. %patch1 -p1 %patch2 -p1 %patch3 -p1 +%patch4 -p1 # Fix permissions in examples to avoid bogus doc-file dependencies chmod -c 644 examples/* @@ -128,6 +131,9 @@ perl -Iblib/{arch,lib} -MNet::SSLeay -e 'Net::SSLeay::CTX_v3_new()' %{_mandir}/man3/Net::SSLeay::Handle.3* %changelog +* Fri Aug 17 2018 Petr Pisar - 1.85-7 +- Revert retry in Net::SSLeay::write_partial() (bug #1614884) + * Wed Aug 15 2018 Petr Pisar - 1.85-6 - Revert retry in Net::SSLeay::{read,write}() (bug #1614884)