56 lines
1.6 KiB
C++
56 lines
1.6 KiB
C++
$NetBSD: patch-src_BaseSocket.cpp,v 1.1 2016/04/20 13:52:24 prlw1 Exp $
|
|
|
|
Defend against calling select() with nfds >= FD_SETSIZE. PR pkg/50995
|
|
https://github.com/e2guardian/e2guardian/issues/119
|
|
|
|
--- src/BaseSocket.cpp.orig 2012-09-29 20:06:45.000000000 +0000
|
|
+++ src/BaseSocket.cpp
|
|
@@ -61,6 +61,12 @@ int selectEINTR(int numfds, fd_set * rea
|
|
timeval exittime;
|
|
timeval elapsedtime;
|
|
timeval timeoutcopy;
|
|
+
|
|
+ if (numfds >= FD_SETSIZE) {
|
|
+ syslog(LOG_ERR, "selectEINTR called with numfds (%d) >= FD_SETSIZE (%d)", numfds, FD_SETSIZE);
|
|
+ errno = EBADF;
|
|
+ return -1;
|
|
+ }
|
|
while (true) { // using the while as a restart point with continue
|
|
if (timeout != NULL) {
|
|
gettimeofday(&entrytime, NULL);
|
|
@@ -313,6 +319,9 @@ int BaseSocket::getLine(char *buff, int
|
|
#endif
|
|
//if there was a socket error
|
|
if (bufflen < 0) {
|
|
+#ifdef DGDEBUG
|
|
+ syslog(LOG_ERR, "getLine recv returned error = %d (%m)\n", errno);
|
|
+#endif
|
|
if (errno == EINTR && (honour_reloadconfig ? !reloadconfig : true)) {
|
|
continue;
|
|
}
|
|
@@ -423,6 +432,9 @@ int BaseSocket::readFromSocketn(char *bu
|
|
}
|
|
rc = recv(sck, buff, cnt, flags);
|
|
if (rc < 0) {
|
|
+#ifdef DGDEBUG
|
|
+ syslog(LOG_ERR, "readFromSocketn recv returned error = %d (%m)\n", errno);
|
|
+#endif
|
|
if (errno == EINTR) {
|
|
continue;
|
|
}
|
|
@@ -473,9 +485,14 @@ int BaseSocket::readFromSocket(char *buf
|
|
while (true) {
|
|
rc = recv(sck, buff, cnt, flags);
|
|
if (rc < 0) {
|
|
+#ifdef DGDEBUG
|
|
+ syslog(LOG_ERR, "readFromSocket recv returned unhandled? error = %d (%m)\n", errno);
|
|
+#endif
|
|
if (errno == EINTR && (honour_reloadconfig ? !reloadconfig : true)) {
|
|
continue;
|
|
}
|
|
+ sleep(1);
|
|
+ continue;
|
|
}
|
|
|
|
break;
|