From 8e590adf77f1bc43b999e510f8028b5c50d66d3a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppi...@redhat.com>
Date: Thu, 16 Jun 2016 08:18:38 +0200
Subject: Do not mangle errno from failed socket call

---
 ...6-preserve-errno-from-failed-system-calls.patch | 73 ++++++++++++++++++++++
 perl.spec                                          |  7 +++
 2 files changed, 80 insertions(+)
 create mode 100644 
perl-5.25.1-perl-128316-preserve-errno-from-failed-system-calls.patch

diff --git 
a/perl-5.25.1-perl-128316-preserve-errno-from-failed-system-calls.patch 
b/perl-5.25.1-perl-128316-preserve-errno-from-failed-system-calls.patch
new file mode 100644
index 0000000..df7a173
--- /dev/null
+++ b/perl-5.25.1-perl-128316-preserve-errno-from-failed-system-calls.patch
@@ -0,0 +1,73 @@
+From 3f6b66c14467c0f8c7459e32c576618155ca89f3 Mon Sep 17 00:00:00 2001
+From: Tony Cook <t...@develop-help.com>
+Date: Thu, 16 Jun 2016 14:08:18 +1000
+Subject: [PATCH] (perl #128316) preserve errno from failed system calls
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Písař <ppi...@redhat.com>
+---
+ pp_sys.c      |  4 ++--
+ t/io/socket.t | 22 ++++++++++++++++++++++
+ 2 files changed, 24 insertions(+), 2 deletions(-)
+
+diff --git a/pp_sys.c b/pp_sys.c
+index 33cba46..3bf2673 100644
+--- a/pp_sys.c
++++ b/pp_sys.c
+@@ -2497,7 +2497,6 @@ PP(pp_socket)
+     TAINT_PROPER("socket");
+     fd = PerlSock_socket(domain, type, protocol);
+     if (fd < 0) {
+-        SETERRNO(EBADF,RMS_IFI);
+       RETPUSHUNDEF;
+     }
+     IoIFP(io) = PerlIO_fdopen(fd, "r"SOCKET_OPEN_MODE);       /* stdio gets 
confused about sockets */
+@@ -3531,8 +3530,9 @@ PP(pp_fttext)
+         }
+       PL_laststatval = PerlLIO_fstat(fd, &PL_statcache);
+       if (PL_laststatval < 0) {
++            dSAVE_ERRNO;
+           (void)PerlIO_close(fp);
+-            SETERRNO(EBADF,RMS_IFI);
++            RESTORE_ERRNO;
+           FT_RETURNUNDEF;
+       }
+       PerlIO_binmode(aTHX_ fp, '<', O_BINARY, NULL);
+diff --git a/t/io/socket.t b/t/io/socket.t
+index b51079a..54e4438 100644
+--- a/t/io/socket.t
++++ b/t/io/socket.t
+@@ -128,6 +128,28 @@ SKIP: {
+     }
+ }
+ 
++SKIP:
++{
++    eval { require Errno; defined &Errno::EMFILE }
++      or skip "Can't load Errno or EMFILE not defined", 1;
++    my @socks;
++    my $sock_limit = 1000; # don't consume every file in the system
++    # Default limits on various systems I have:
++    #  65536 - Linux
++    #    256 - Solaris
++    #    128 - NetBSD
++    #    256 - Cygwin
++    #    256 - darwin
++    while (@socks < $sock_limit) {
++        socket my $work, PF_INET, SOCK_STREAM, $tcp
++          or last;
++        push @socks, $work;
++    }
++    @socks == $sock_limit
++      and skip "Didn't run out of open handles", 1;
++    is(0+$!, Errno::EMFILE(), "check correct errno for too many files");
++}
++
+ done_testing();
+ 
+ my @child_tests;
+-- 
+2.5.5
+
diff --git a/perl.spec b/perl.spec
index 0bcc86e..ff062af 100644
--- a/perl.spec
+++ b/perl.spec
@@ -107,6 +107,10 @@ Patch31:        
perl-5.22.2-CVE-2016-1238-maint-5.22-dot-in-inc.patch
 # Fix a crash in lexical scope warnings, RT#128597, in upstream after 5.25.2
 Patch32:        perl-5.22.2-perl-128597-Crash-from-gp_free-ckWARN_d.patch
 
+# Do not mangle errno from failed socket calls, RT#128316,
+# in upstream after 5.25.1
+Patch33:        
perl-5.25.1-perl-128316-preserve-errno-from-failed-system-calls.patch
+
 # Link XS modules to libperl.so with EU::CBuilder on Linux, bug #960048
 Patch200:       
perl-5.16.3-Link-XS-modules-to-libperl.so-with-EU-CBuilder-on-Li.patch
 
@@ -2152,6 +2156,7 @@ Perl extension for Version Objects
 %patch30 -p1
 %patch31 -p1
 %patch32 -p1
+%patch33 -p1
 %patch200 -p1
 %patch201 -p1
 
@@ -2176,6 +2181,7 @@ perl -x patchlevel.h \
     'Fedora Patch30: Do not let XSLoader load relative paths (CVE-2016-6185)' \
     'Fedora Patch31: Avoid loading optional modules from default . 
(CVE-2016-1238)' \
     'Fedora Patch32: Fix a crash in lexical scope warnings (RT#128597)' \
+    'Fedora Patch33: Do not mangle errno from failed socket calls (RT#128316)' 
\
     'Fedora Patch200: Link XS modules to libperl.so with EU::CBuilder on 
Linux' \
     'Fedora Patch201: Link XS modules to libperl.so with EU::MM on Linux' \
     %{nil}
@@ -4191,6 +4197,7 @@ popd
 %changelog
 * Fri Nov 04 2016 Petr Pisar <ppi...@redhat.com> - 4:5.22.2-355
 - Fix a crash in lexical scope warnings (RT#128597)
+- Do not mangle errno from failed socket calls (RT#128316)
 
 * Wed Aug 03 2016 Jitka Plesnikova <jples...@redhat.com> - 4:5.22.2-354
 - Avoid loading optional modules from default . (CVE-2016-1238)
-- 
cgit v0.12


        
http://pkgs.fedoraproject.org/cgit/perl.git/commit/?h=f23&id=8e590adf77f1bc43b999e510f8028b5c50d66d3a
_______________________________________________
perl-devel mailing list -- perl-devel@lists.fedoraproject.org
To unsubscribe send an email to perl-devel-le...@lists.fedoraproject.org

Reply via email to