diff options
author | rdivacky <rdivacky@FreeBSD.org> | 2008-07-23 17:19:02 +0000 |
---|---|---|
committer | rdivacky <rdivacky@FreeBSD.org> | 2008-07-23 17:19:02 +0000 |
commit | 32f23bcf55d924e7417584db022246d17ccf6f46 (patch) | |
tree | 05088ed26bc9f59dba7fee2a18175a16764fe364 /sys/compat | |
parent | 01d1a97b944478975f9f98c58e8179cd5f352a36 (diff) | |
download | FreeBSD-src-32f23bcf55d924e7417584db022246d17ccf6f46.zip FreeBSD-src-32f23bcf55d924e7417584db022246d17ccf6f46.tar.gz |
Fix linux_alarm, the linux behaviour is to limit the
secs to INT_MAX when the passed in parameter is bigger
than INT_MAX.
Submitted by: Dmitry Chagin <chagin.dmitry gmail com>
Approved by: kib (mentor)
Diffstat (limited to 'sys/compat')
-rw-r--r-- | sys/compat/linux/linux_misc.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/sys/compat/linux/linux_misc.c b/sys/compat/linux/linux_misc.c index e9fdccc..57d315f 100644 --- a/sys/compat/linux/linux_misc.c +++ b/sys/compat/linux/linux_misc.c @@ -170,17 +170,20 @@ int linux_alarm(struct thread *td, struct linux_alarm_args *args) { struct itimerval it, old_it; + u_int secs; int error; #ifdef DEBUG if (ldebug(alarm)) printf(ARGS(alarm, "%u"), args->secs); #endif + + secs = args->secs; - if (args->secs > 100000000) - return (EINVAL); + if (secs > INT_MAX) + secs = INT_MAX; - it.it_value.tv_sec = (long)args->secs; + it.it_value.tv_sec = (long) secs; it.it_value.tv_usec = 0; it.it_interval.tv_sec = 0; it.it_interval.tv_usec = 0; |