diff --git a/src/libstore/build.cc b/src/libstore/build.cc
index 60b0a531f4235ad206bc16e1e4736182d7e1375c..d2a270259a8cc084d7ba3a2c8e33e06c6845c11b 100644
--- a/src/libstore/build.cc
+++ b/src/libstore/build.cc
@@ -3835,6 +3835,9 @@ void Worker::waitForInput()
     int fdMax = 0;
     for (auto & i : children) {
         for (auto & j : i.fds) {
+            if (j >= FD_SETSIZE) {
+                throw BuildError("reached FD_SETSIZE limit");
+            }
             FD_SET(j, &fds);
             if (j >= fdMax) fdMax = j + 1;
         }