From: Damien Miller Date: Thu, 22 Jun 2023 05:04:03 +0000 (+1000) Subject: handle sysconf(SC_OPEN_MAX) returning > INT_MAX; X-Git-Tag: V_9_4_P1~54 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cfca6f17e64baed6822bb927ed9f372ce64d9c5b;p=thirdparty%2Fopenssh-portable.git handle sysconf(SC_OPEN_MAX) returning > INT_MAX; bz3581; ok dtucker --- diff --git a/ssh-keyscan.c b/ssh-keyscan.c index 96c6e9066..1d2df709b 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 }