diff options
author | Tim Rühsen <tim.ruehsen@gmx.de> | 2018-06-26 19:33:00 +0000 |
---|---|---|
committer | Tim Rühsen <tim.ruehsen@gmx.de> | 2018-06-26 19:33:00 +0000 |
commit | 0257a5a6a5dafcebb4cc6e626c23bb5a7b333c3c (patch) | |
tree | f41fbba1c9e30d1f3336864823ed73e43da3a064 | |
parent | 9c871f95e258d1110afea1d0f45876f289fc03c3 (diff) | |
parent | 9aa4bbdb885c5b5ab7c29ee598d0e6df14df1141 (diff) | |
download | gnutls-0257a5a6a5dafcebb4cc6e626c23bb5a7b333c3c.tar.gz |
Merge branch 'timespec-overflow2' into 'master'
avoid more possible overflows when substracting timespecs
See merge request gnutls/gnutls!685
-rw-r--r-- | doc/examples/ex-serv-dtls.c | 9 | ||||
-rw-r--r-- | src/benchmark.c | 4 | ||||
-rw-r--r-- | src/common.h | 8 | ||||
-rw-r--r-- | src/udp-serv.c | 9 | ||||
-rw-r--r-- | tests/mini-dtls-mtu.c | 9 | ||||
-rw-r--r-- | tests/suite/mini-record-timing.c | 4 |
6 files changed, 11 insertions, 32 deletions
diff --git a/doc/examples/ex-serv-dtls.c b/doc/examples/ex-serv-dtls.c index 887b4b83df..23b51a1781 100644 --- a/doc/examples/ex-serv-dtls.c +++ b/doc/examples/ex-serv-dtls.c @@ -303,13 +303,8 @@ static int pull_timeout_func(gnutls_transport_ptr_t ptr, unsigned int ms) FD_ZERO(&rfds); FD_SET(priv->fd, &rfds); - tv.tv_sec = 0; - tv.tv_usec = ms * 1000; - - while (tv.tv_usec >= 1000000) { - tv.tv_usec -= 1000000; - tv.tv_sec++; - } + tv.tv_sec = ms / 1000; + tv.tv_usec = (ms % 1000) * 1000; ret = select(priv->fd + 1, &rfds, NULL, NULL, &tv); diff --git a/src/benchmark.c b/src/benchmark.c index 9a83318c3e..bcc12a9037 100644 --- a/src/benchmark.c +++ b/src/benchmark.c @@ -130,9 +130,7 @@ double stop_benchmark(struct benchmark_st *st, const char *metric, gettime(&stop); - lsecs = (stop.tv_sec * 1000 + stop.tv_nsec / (1000 * 1000) - - (st->start.tv_sec * 1000 + - st->start.tv_nsec / (1000 * 1000))); + lsecs = timespec_sub_ms(&stop, &st->start); secs = lsecs; secs /= 1000; diff --git a/src/common.h b/src/common.h index f1c828ce40..20faf7d521 100644 --- a/src/common.h +++ b/src/common.h @@ -101,12 +101,8 @@ static int system_recv_timeout(gnutls_transport_ptr_t ptr, unsigned int ms) FD_ZERO(&rfds); FD_SET(fd, &rfds); - tv.tv_sec = 0; - tv.tv_usec = ms * 1000; - while (tv.tv_usec >= 1000000) { - tv.tv_usec -= 1000000; - tv.tv_sec++; - } + tv.tv_sec = ms / 1000; + tv.tv_usec = (ms % 1000) * 1000; return select(fd + 1, &rfds, NULL, NULL, &tv); } diff --git a/src/udp-serv.c b/src/udp-serv.c index 5442946165..46e1e70878 100644 --- a/src/udp-serv.c +++ b/src/udp-serv.c @@ -239,13 +239,8 @@ static int pull_timeout_func(gnutls_transport_ptr_t ptr, unsigned int ms) FD_ZERO(&rfds); FD_SET(priv->fd, &rfds); - tv.tv_sec = 0; - tv.tv_usec = ms * 1000; - - while (tv.tv_usec >= 1000000) { - tv.tv_usec -= 1000000; - tv.tv_sec++; - } + tv.tv_sec = ms / 1000; + tv.tv_usec = (ms % 1000) * 1000; ret = select(priv->fd + 1, &rfds, NULL, NULL, &tv); diff --git a/tests/mini-dtls-mtu.c b/tests/mini-dtls-mtu.c index 82106081d6..1ae7325665 100644 --- a/tests/mini-dtls-mtu.c +++ b/tests/mini-dtls-mtu.c @@ -103,13 +103,8 @@ static int client_pull_timeout(gnutls_transport_ptr_t ptr, unsigned int ms) FD_ZERO(&rfds); FD_SET(fd, &rfds); - tv.tv_sec = 0; - tv.tv_usec = ms * 1000; - - while (tv.tv_usec >= 1000000) { - tv.tv_usec -= 1000000; - tv.tv_sec++; - } + tv.tv_sec = (ms / 1000); + tv.tv_usec = (ms % 1000) * 1000; ret = select(fd + 1, &rfds, NULL, NULL, &tv); if (ret <= 0) diff --git a/tests/suite/mini-record-timing.c b/tests/suite/mini-record-timing.c index b08d36434c..5d425a9573 100644 --- a/tests/suite/mini-record-timing.c +++ b/tests/suite/mini-record-timing.c @@ -154,8 +154,8 @@ push_crippled(gnutls_transport_ptr_t tr, const void *_data, size_t len) static unsigned long timespec_sub_ns(struct timespec *a, struct timespec *b) { - return (a->tv_sec * 1000 * 1000 * 1000 + a->tv_nsec - - (b->tv_sec * 1000 * 1000 * 1000 + b->tv_nsec)); + return (a->tv_sec - b->tv_sec) * 1000 * 1000 * 1000 + a->tv_nsec - + b->tv_nsec; } #endif |