]> granicus.if.org Git - php/commitdiff
Fix #66908: php-fpm reload leaks epoll_create() file descriptor
authorJulio Pintos <julio.pintos@avature.net>
Fri, 14 Mar 2014 19:47:30 +0000 (16:47 -0300)
committerStanislav Malyshev <stas@php.net>
Sun, 20 Apr 2014 23:21:49 +0000 (16:21 -0700)
This patch fixes descriptor leak which could lead to DoS once Max open files is reached

NEWS
sapi/fpm/fpm/events/epoll.c

diff --git a/NEWS b/NEWS
index d9f0f8a353ccaa046763581e68c79bda6c06a90e..7b2b4048046e03c4e660c17ebf7ac06f031ab0df 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -11,6 +11,10 @@ PHP                                                                        NEWS
   . Fixed bug #67081 (DOMDocumentType->internalSubset returns entire DOCTYPE tag,
     not only the subset). (Anatol)
 
+- FPM:
+  . Fixed bug #66908 (php-fpm reload leaks epoll_create() file descriptor). 
+    (Julio Pintos)
+
 ?? ??? 2014, PHP 5.4.28
 
 - Core:
index 2857ea2a09eb814263caa53bb6335e920c2eb6a9..b55cb44b15986d3fd18de4d8f11d652f4dae9048 100644 (file)
@@ -46,7 +46,7 @@ static struct fpm_event_module_s epoll_module = {
 
 static struct epoll_event *epollfds = NULL;
 static int nepollfds = 0;
-static int epollfd = 0;
+static int epollfd = -1;
 
 #endif /* HAVE_EPOLL */
 
@@ -103,6 +103,10 @@ static int fpm_event_epoll_clean() /* {{{ */
                free(epollfds);
                epollfds = NULL;
        }
+       if (epollfd != -1) {
+               close(epollfd);
+               epollfd = -1;
+       }
 
        nepollfds = 0;