summaryrefslogtreecommitdiff
path: root/erts/epmd
diff options
context:
space:
mode:
authorLukas Larsson <lukas@erlang.org>2020-04-16 17:29:42 +0200
committerLukas Larsson <lukas@erlang.org>2020-04-16 17:29:44 +0200
commitffb26e566c0cfc963883bb3e846e68d7a7c71cb0 (patch)
tree2e890107e4bdd2b3c16c83a3b1e7eb491f8e3d1c /erts/epmd
parente9f3739d7f346006e9564f1d98a15052544d2720 (diff)
downloaderlang-ffb26e566c0cfc963883bb3e846e68d7a7c71cb0.tar.gz
epmd: Validate that the FD fits in the set
On some OSs (NetBSD) we get larger FDs then we should based on the number of files open to we have to check that the FD actually fits in the fd_set.
Diffstat (limited to 'erts/epmd')
-rw-r--r--erts/epmd/src/epmd_srv.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/erts/epmd/src/epmd_srv.c b/erts/epmd/src/epmd_srv.c
index 2f4f189bb4..c37ca197f5 100644
--- a/erts/epmd/src/epmd_srv.c
+++ b/erts/epmd/src/epmd_srv.c
@@ -1054,6 +1054,12 @@ static int conn_open(EpmdVars *g,int fd)
int i;
Connection *s;
+ if (fd >= FD_SETSIZE) {
+ dbg_tty_printf(g,0,"fd does not fit in fd_set fd=%d, FD_SETSIZE=%d",fd, FD_SETSIZE);
+ close(fd);
+ return EPMD_FALSE;
+ }
+
for (i = 0; i < g->max_conn; i++) {
if (g->conn[i].open == EPMD_FALSE) {
g->active_conn++;