contain: fail of fcntl(F_GETFD) fails for a fd with something else then EBADFD

This commit is contained in:
Robert Swiecki 2023-10-01 00:32:29 +02:00
parent f388cad3e0
commit c1515459d7

View File

@ -206,9 +206,13 @@ static bool containMakeFdsCOENaive(nsjconf_t* nsjconf) {
*/ */
for (unsigned fd = 0; fd < 1024; fd++) { for (unsigned fd = 0; fd < 1024; fd++) {
int flags = TEMP_FAILURE_RETRY(fcntl(fd, F_GETFD, 0)); int flags = TEMP_FAILURE_RETRY(fcntl(fd, F_GETFD, 0));
if (flags == -1) { if (flags == -1 && errno == EBADF) {
continue; continue;
} }
if (flags == -1) {
PLOG_E("Couldn't get flags for fd=%d", fd)
return false;
}
if (containPassFd(nsjconf, fd)) { if (containPassFd(nsjconf, fd)) {
LOG_D("fd=%d will be passed to the child process", fd); LOG_D("fd=%d will be passed to the child process", fd);
if (TEMP_FAILURE_RETRY(fcntl(fd, F_SETFD, flags & ~(FD_CLOEXEC))) == -1) { if (TEMP_FAILURE_RETRY(fcntl(fd, F_SETFD, flags & ~(FD_CLOEXEC))) == -1) {