summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkettenis <kettenis@openbsd.org>2012-06-20 21:53:51 +0000
committerkettenis <kettenis@openbsd.org>2012-06-20 21:53:51 +0000
commitca9189a67896542c88de000839d6850e1d2406c3 (patch)
tree7fcd07a77e5026e7ab0e2a3574f9547b4ebbcb80
parentmove to 5.2-beta (diff)
downloadwireguard-openbsd-ca9189a67896542c88de000839d6850e1d2406c3.tar.xz
wireguard-openbsd-ca9189a67896542c88de000839d6850e1d2406c3.zip
Cancel all timeouts in state_reboot(), since we can get there from any state
if a link state change happens. Fixes a problem where we'd continue to send (corrupted) discover packets after binding. ok krw@
-rw-r--r--sbin/dhclient/dhclient.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/sbin/dhclient/dhclient.c b/sbin/dhclient/dhclient.c
index ce3a9fc1f2e..b494467efe0 100644
--- a/sbin/dhclient/dhclient.c
+++ b/sbin/dhclient/dhclient.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: dhclient.c,v 1.142 2011/12/10 15:55:43 krw Exp $ */
+/* $OpenBSD: dhclient.c,v 1.143 2012/06/20 21:53:51 kettenis Exp $ */
/*
* Copyright 2004 Henning Brauer <henning@openbsd.org>
@@ -468,6 +468,14 @@ usage(void)
void
state_reboot(void)
{
+ /* Cancel all timeouts, since a link state change gets us here
+ and can happen anytime. */
+ cancel_timeout(state_init);
+ cancel_timeout(state_selecting);
+ cancel_timeout(state_bound);
+ cancel_timeout(send_discover);
+ cancel_timeout(send_request);
+
/* If we don't remember an active lease, go straight to INIT. */
if (!client->active || client->active->is_bootp) {
state_init();