summaryrefslogtreecommitdiffstats
path: root/sys/net
diff options
context:
space:
mode:
authoralex <alex@FreeBSD.org>1998-10-08 00:32:08 +0000
committeralex <alex@FreeBSD.org>1998-10-08 00:32:08 +0000
commit06ba723cf30c0f872155d81b19dd28041089b03d (patch)
tree2ba72dd80275ad6e0b74d756a91523ede3eea518 /sys/net
parent0fe4e68af45b0f0ed84d5638a6865c547626c536 (diff)
downloadFreeBSD-src-06ba723cf30c0f872155d81b19dd28041089b03d.zip
FreeBSD-src-06ba723cf30c0f872155d81b19dd28041089b03d.tar.gz
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
Diffstat (limited to 'sys/net')
-rw-r--r--sys/net/bpf.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/sys/net/bpf.c b/sys/net/bpf.c
index 78bd721..f9a217b 100644
--- a/sys/net/bpf.c
+++ b/sys/net/bpf.c
@@ -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;
}
OpenPOWER on IntegriCloud