summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Harris <jgh146exb@wizmail.org>2021-01-01 13:25:29 +0000
committerJeremy Harris <jgh146exb@wizmail.org>2021-01-01 13:25:29 +0000
commit3eb0bcd7a112a70bbdd61bedde4878ceae4e1297 (patch)
treea4911f6424b0b7cc9ca4f5ba62fb528a1e9664ec
parent3bd31c400d7cb546c5583fbee8d998e232eef5c2 (diff)
FreeBSD: harden against ClamAV connection errors
-rw-r--r--src/src/malware.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/src/malware.c b/src/src/malware.c
index 2883f225a..dfa8e2b4b 100644
--- a/src/src/malware.c
+++ b/src/src/malware.c
@@ -272,8 +272,19 @@ static inline int
m_tcpsocket(const uschar * hostname, unsigned int port,
host_item * host, uschar ** errstr, const blob * fastopen_blob)
{
-return ip_connectedsocket(SOCK_STREAM, hostname, port, port, 5,
+int fd = ip_connectedsocket(SOCK_STREAM, hostname, port, port, 5,
host, errstr, fastopen_blob);
+#ifdef EXIM_TFO_FREEBSD
+/* Under some fault conditions, FreeBSD 12.2 seen to send a (non-TFO) SYN
+and, getting no response, wait for a long time. Impose a 5s max. */
+if (fd >= 0)
+ {
+ struct timeval tv = {.tv_sec = 5};
+ fd_set fds;
+ FD_ZERO(fds); FD_SET(fd, &fds); (void) select(fd+1, NULL, &fds, NULL, &tv);
+ }
+#endif
+return fd;
}
#endif