diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2015-01-27 21:59:40 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2015-01-27 21:59:40 +0100 |
commit | 936c401077cc68d9e3dd7f1b0b293ee03ce02bf5 (patch) | |
tree | 5315bc6e3d1e77602dc4b5f198697e9c49370470 /networking/udhcp/dhcpd.c | |
parent | 64b744997ef399809dc4c78ec45ddfbebde3e597 (diff) | |
download | busybox-w32-936c401077cc68d9e3dd7f1b0b293ee03ce02bf5.tar.gz busybox-w32-936c401077cc68d9e3dd7f1b0b293ee03ce02bf5.tar.bz2 busybox-w32-936c401077cc68d9e3dd7f1b0b293ee03ce02bf5.zip |
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>
Diffstat (limited to 'networking/udhcp/dhcpd.c')
-rw-r--r-- | networking/udhcp/dhcpd.c | 3 |
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) | |||
413 | 413 | ||
414 | max_sock = udhcp_sp_fd_set(&rfds, server_socket); | 414 | max_sock = udhcp_sp_fd_set(&rfds, server_socket); |
415 | if (server_config.auto_time) { | 415 | if (server_config.auto_time) { |
416 | tv.tv_sec = timeout_end - monotonic_sec(); | 416 | /* cast to signed is essential if tv_sec is wider than int */ |
417 | tv.tv_sec = (int)(timeout_end - monotonic_sec()); | ||
417 | tv.tv_usec = 0; | 418 | tv.tv_usec = 0; |
418 | } | 419 | } |
419 | retval = 0; | 420 | retval = 0; |