]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
handle sysconf(SC_OPEN_MAX) returning > INT_MAX;
authorDamien Miller <djm@mindrot.org>
Thu, 22 Jun 2023 05:04:03 +0000 (15:04 +1000)
committerDamien Miller <djm@mindrot.org>
Thu, 22 Jun 2023 05:04:03 +0000 (15:04 +1000)
bz3581; ok dtucker

ssh-keyscan.c

index 96c6e9066161c48a3aac1a859fd8caec3bc2953b..1d2df709b70dae10ca7b1f8d762d7243c0d034a4 100644 (file)
@@ -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
 }