From: John Schroeder Date: Thu, 25 Dec 2014 20:12:51 +0000 (+0100) Subject: udhcpd: account for script delay in lease X-Git-Tag: 1_24_0~254 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=8074a6ca4dc4e30e38570b52529b87c547c41b1b;p=oweals%2Fbusybox.git udhcpd: account for script delay in lease Prevent nasty surprises if script runs longer than lease time / 2. Signed-off-by: John Schroeder Signed-off-by: Denys Vlasenko --- diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c index a34829c3a..9d3d1a31c 100644 --- a/networking/udhcp/dhcpc.c +++ b/networking/udhcp/dhcpc.c @@ -1752,7 +1752,6 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv) } #endif /* enter bound state */ - timeout = lease_seconds / 2; temp_addr.s_addr = packet.yiaddr; bb_info_msg("Lease of %s obtained, lease time %u", inet_ntoa(temp_addr), (unsigned)lease_seconds); @@ -1761,6 +1760,11 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv) start = monotonic_sec(); udhcp_run_script(&packet, state == REQUESTING ? "bound" : "renew"); already_waited_sec = (unsigned)monotonic_sec() - start; + timeout = lease_seconds / 2; + if ((unsigned)timeout < already_waited_sec) { + /* Something went wrong. Back to discover state */ + timeout = already_waited_sec = 0; + } state = BOUND; change_listen_mode(LISTEN_NONE);