summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorFlorian Obser <florian@cvs.openbsd.org>2018-08-03 09:11:57 +0000
committerFlorian Obser <florian@cvs.openbsd.org>2018-08-03 09:11:57 +0000
commit5dbb9c78c903467482113d214d12f983e4e4c6c4 (patch)
tree53dc30aa7cbee74c718a23b7d5046979025bef99 /sys
parent695ba97c9faaa4638cbbada2e7be7f49f54aa881 (diff)
Account when the next nd6_timer_to is scheduled in nd6_timer()
otherwise nd6_llinfo_settimer() might wrongly assume that a timeout is already scheduled earlier and not schedule one itself. This in turn lead to the neighbor cache no longer updating because neighbor solicitations were not send. Observed by many. OK kn
Diffstat (limited to 'sys')
-rw-r--r--sys/netinet6/nd6.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/netinet6/nd6.c b/sys/netinet6/nd6.c
index bce15ad5135..f11c067fbbd 100644
--- a/sys/netinet6/nd6.c
+++ b/sys/netinet6/nd6.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: nd6.c,v 1.225 2018/07/11 21:18:23 nayden Exp $ */
+/* $OpenBSD: nd6.c,v 1.226 2018/08/03 09:11:56 florian Exp $ */
/* $KAME: nd6.c,v 1.280 2002/06/08 19:52:07 itojun Exp $ */
/*
@@ -336,8 +336,10 @@ nd6_timer(void *arg)
secs = expire - time_uptime;
if (secs < 0)
secs = 0;
- if (!TAILQ_EMPTY(&nd6_list))
+ if (!TAILQ_EMPTY(&nd6_list)) {
+ nd6_timer_next = time_uptime + secs;
timeout_add_sec(&nd6_timer_to, secs);
+ }
NET_UNLOCK();
}