diff options
author | alex <alex@FreeBSD.org> | 1998-10-08 00:32:08 +0000 |
---|---|---|
committer | alex <alex@FreeBSD.org> | 1998-10-08 00:32:08 +0000 |
commit | 06ba723cf30c0f872155d81b19dd28041089b03d (patch) | |
tree | 2ba72dd80275ad6e0b74d756a91523ede3eea518 /sys/net/bpf.c | |
parent | 0fe4e68af45b0f0ed84d5638a6865c547626c536 (diff) | |
download | FreeBSD-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/bpf.c')
-rw-r--r-- | sys/net/bpf.c | 17 |
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; } |