aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2015-01-27 21:59:40 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2015-01-27 21:59:40 +0100
commit936c401077cc68d9e3dd7f1b0b293ee03ce02bf5 (patch)
tree5315bc6e3d1e77602dc4b5f198697e9c49370470
parent64b744997ef399809dc4c78ec45ddfbebde3e597 (diff)
downloadbusybox-936c401077cc68d9e3dd7f1b0b293ee03ce02bf5.tar.gz
dhcpd: fix an improper widening conversion
We wanted to detect when tv_sec = unsigned1 - unsigned2 underflows by looking at tv_sec's sign. But if tv_sec is long and it is wider than unsigned, we get unsigned -> long conversion which is in this case never negative. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--networking/udhcp/dhcpd.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/networking/udhcp/dhcpd.c b/networking/udhcp/dhcpd.c
index 4b3ed240c..2de074f9b 100644
--- a/networking/udhcp/dhcpd.c
+++ b/networking/udhcp/dhcpd.c
@@ -413,7 +413,8 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
max_sock = udhcp_sp_fd_set(&rfds, server_socket);
if (server_config.auto_time) {
- tv.tv_sec = timeout_end - monotonic_sec();
+ /* cast to signed is essential if tv_sec is wider than int */
+ tv.tv_sec = (int)(timeout_end - monotonic_sec());
tv.tv_usec = 0;
}
retval = 0;