Check the timeval passed to BIOCSRTIMEOUT with itimerfix. Use tvtohz()

to convert the timeval into a tick count.

Suggested by:	bde
Reviewed by:	bde

Handle hz > 1000 in BIOCGRTIMEOUT.

Pointed out by:	bde
Reviewed by:	bde
Obtained from:	OpenBSD
This commit is contained in:
Alexander Langer 1998-10-08 00:32:08 +00:00
parent 47230ffe29
commit bdc2cdc5fe
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=40049

View File

@ -37,7 +37,7 @@
*
* @(#)bpf.c 8.2 (Berkeley) 3/28/94
*
* $Id: bpf.c,v 1.42 1998/10/04 17:20:22 alex Exp $
* $Id: bpf.c,v 1.43 1998/10/04 23:04:48 alex Exp $
*/
#include "bpfilter.h"
@ -778,9 +778,12 @@ bpfioctl(dev, cmd, addr, flags, p)
{
struct timeval *tv = (struct timeval *)addr;
d->bd_rtout = tv->tv_sec * hz + tv->tv_usec / tick;
if (d->bd_rtout == 0 && tv->tv_usec != 0)
d->bd_rtout = 1;
/*
* Subtract 1 tick from tvtohz() since this isn't
* a one-shot timer.
*/
if ((error = itimerfix(tv)) == 0)
d->bd_rtout = tvtohz(tv) - 1;
break;
}
@ -790,11 +793,9 @@ bpfioctl(dev, cmd, addr, flags, p)
case BIOCGRTIMEOUT:
{
struct timeval *tv = (struct timeval *)addr;
u_long msec = d->bd_rtout;
msec *= tick / 1000;
tv->tv_sec = msec / 1000;
tv->tv_usec = msec % 1000;
tv->tv_sec = d->bd_rtout / hz;
tv->tv_usec = (d->bd_rtout % hz) * tick;
break;
}