diff options
author | Angelos D. Keromytis <angelos@cvs.openbsd.org> | 2002-06-07 23:18:30 +0000 |
---|---|---|
committer | Angelos D. Keromytis <angelos@cvs.openbsd.org> | 2002-06-07 23:18:30 +0000 |
commit | 396c12b15b5bc3869a89e2d194724cd4d35e8e14 (patch) | |
tree | f7a068fee6bee017317aa081b9565bd33c4be03f /sys/net | |
parent | d96938b9545775cbdbf7b555282b5bf5e9ede6ff (diff) |
Detect wrap-around of timeout and set it to its maximum value. Hacky
way of getting the max value attributed to millert@
Diffstat (limited to 'sys/net')
-rw-r--r-- | sys/net/pfkeyv2_convert.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/sys/net/pfkeyv2_convert.c b/sys/net/pfkeyv2_convert.c index bf2562fcd55..a882fea570c 100644 --- a/sys/net/pfkeyv2_convert.c +++ b/sys/net/pfkeyv2_convert.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pfkeyv2_convert.c,v 1.10 2002/06/07 04:47:06 ho Exp $ */ +/* $OpenBSD: pfkeyv2_convert.c,v 1.11 2002/06/07 23:18:29 angelos Exp $ */ /* * The author of this code is Angelos D. Keromytis (angelos@keromytis.org) * @@ -270,9 +270,11 @@ import_lifetime(struct tdb *tdb, struct sadb_lifetime *sadb_lifetime, int type) if ((tdb->tdb_exp_timeout = sadb_lifetime->sadb_lifetime_addtime) != 0) { tdb->tdb_flags |= TDBF_TIMER; - tv.tv_sec += tdb->tdb_exp_timeout; - timeout_add(&tdb->tdb_timer_tmo, - hzto(&tv)); + if (tv.tv_sec + tdb->tdb_exp_timeout < tv.tv_sec) + tv.tv_sec = ((unsigned long) -1) / 2; /* XXX */ + else + tv.tv_sec += tdb->tdb_exp_timeout; + timeout_add(&tdb->tdb_timer_tmo, hzto(&tv)); } else tdb->tdb_flags &= ~TDBF_TIMER; @@ -299,9 +301,11 @@ import_lifetime(struct tdb *tdb, struct sadb_lifetime *sadb_lifetime, int type) if ((tdb->tdb_soft_timeout = sadb_lifetime->sadb_lifetime_addtime) != 0) { tdb->tdb_flags |= TDBF_SOFT_TIMER; - tv.tv_sec += tdb->tdb_soft_timeout; - timeout_add(&tdb->tdb_stimer_tmo, - hzto(&tv)); + if (tv.tv_sec + tdb->tdb_soft_timeout < tv.tv_sec) + tv.tv_sec = ((unsigned long) -1) / 2; /* XXX */ + else + tv.tv_sec += tdb->tdb_soft_timeout; + timeout_add(&tdb->tdb_stimer_tmo, hzto(&tv)); } else tdb->tdb_flags &= ~TDBF_SOFT_TIMER; |