diff options
author | Damien Miller <djm@mindrot.org> | 2023-06-22 15:04:03 +1000 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2023-06-22 15:04:03 +1000 |
commit | cfca6f17e64baed6822bb927ed9f372ce64d9c5b (patch) | |
tree | 8e3dbeb52574749482b7353f42f6d5dff90c84ba | |
parent | c1c2ca1365b3f7b626683690bd2c68265f6d8ffd (diff) |
handle sysconf(SC_OPEN_MAX) returning > INT_MAX;
bz3581; ok dtucker
-rw-r--r-- | ssh-keyscan.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/ssh-keyscan.c b/ssh-keyscan.c index 96c6e906..1d2df709 100644 --- a/ssh-keyscan.c +++ b/ssh-keyscan.c @@ -132,16 +132,21 @@ fdlim_get(int hard) { #if defined(HAVE_GETRLIMIT) && defined(RLIMIT_NOFILE) struct rlimit rlfd; + rlim_t lim; - if (getrlimit(RLIMIT_NOFILE, &rlfd) == -1 || - (hard ? rlfd.rlim_max : rlfd.rlim_cur) < 0) + if (getrlimit(RLIMIT_NOFILE, &rlfd) == -1) + return -1; + lim = hard ? rlfd.rlim_max : rlfd.rlim_cur; + if (lim <= 0) return -1; - if ((hard ? rlfd.rlim_max : rlfd.rlim_cur) == RLIM_INFINITY || - (hard ? rlfd.rlim_max : rlfd.rlim_cur) > INT_MAX) - return SSH_SYSFDMAX; - return hard ? rlfd.rlim_max : rlfd.rlim_cur; + if (lim == RLIM_INFINITY) + lim = SSH_SYSFDMAX; + if (lim >= INT_MAX) + lim = INT_MAX; + return lim; #else - return SSH_SYSFDMAX; + return (SSH_SYSFDMAX <= 0) ? -1 : + ((SSH_SYSFDMAX >= INT_MAX) ? INT_MAX : SSH_SYSFDMAX); #endif } |