--- /dev/null
+#!/bin/sh
+# Validate large timeout parameters
+# Separated from standard parameter testing due to kernel overflow bugs.
+
+# Copyright (C) 2008-2020 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
+print_ver_ timeout
+getlimits_
+
+# It was seen on 32 bit Linux/HPPA and OpenIndiana 11
+# that a kernel time_t overflowing cause the timer to fire immediately.
+# This is still racy, but unlikely to cause an issue unless
+# timeout can't process the timer firing within 3 seconds.
+timeout $TIME_T_OFLOW sleep 3
+if test $? = 124; then
+ skip_ 'timeout $TIME_T_OFLOW ..., timed out immediately!'
+fi
+
+# timeout overflow
+timeout $UINT_OFLOW sleep 0 || fail=1
+
+# timeout overflow
+timeout ${TIME_T_OFLOW}d sleep 0 || fail=1
+
+# floating point notation
+timeout 2.34e+5d sleep 0 || fail=1
+
+# floating point overflow
+timeout $LDBL_MAX sleep 0 || fail=1
+returns_ 125 timeout -- -$LDBL_MAX sleep 0 || fail=1
+
+Exit $fail
# invalid timeout suffix
returns_ 125 timeout 42D sleep 0 || fail=1
-# It was seen on 32 bit Linux/HPPA that a kernel time_t overflowed,
-# thus causing the timer to fire immediately.
-# So verify that doesn't happen before checking large timeouts
-KERNEL_OVERFLOW_LIMIT=$(expr $TIME_T_MAX - $(date +%s) + 100) ||
- skip_ "failed to adjust TIME_T_MAX $TIME_T_MAX"
-timeout $KERNEL_OVERFLOW_LIMIT sleep 0
-if test $? != 124; then
- # timeout overflow
- timeout $UINT_OFLOW sleep 0 || fail=1
-
- # timeout overflow
- timeout ${TIME_T_OFLOW}d sleep 0 || fail=1
-
- # floating point notation
- timeout 2.34e+5d sleep 0 || fail=1
-
- # floating point overflow
- timeout $LDBL_MAX sleep 0 || fail=1
- returns_ 125 timeout -- -$LDBL_MAX sleep 0 || fail=1
-fi
-
# floating point notation
timeout 10.34 sleep 0 || fail=1