The closeall function is broken in such a way that it almost never closes any file descriptors. It's calling strtol on the text representation of the file descriptor, and then checking to see if the value of *endptr is not '\0' before trying to close the file. This check is wrong. When strtol returns an endptr that points to a NULL byte, that indicates that the conversion was completely successful. I believe this check should instead be requiring that endptr is pointing to '\0' before closing the fd. Also, fix up the function to check for conversion errors from strtol. If one occurs, just skip the close on that entry. Reported-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx> --- support/nfs/closeall.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/support/nfs/closeall.c b/support/nfs/closeall.c index cc7fb3b..5fe07de 100644 --- a/support/nfs/closeall.c +++ b/support/nfs/closeall.c @@ -7,6 +7,7 @@ #include <unistd.h> #include <stdlib.h> #include <dirent.h> +#include <errno.h> void closeall(int min) @@ -18,8 +19,9 @@ closeall(int min) while ((d = readdir(dir)) != NULL) { char *endp; + errno = 0; long n = strtol(d->d_name, &endp, 10); - if (*endp != '\0' && n >= min && n != dfd) + if (!errno && *endp == '\0' && n >= min && n != dfd) (void) close(n); } closedir(dir); -- 1.6.0.6 -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html