X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=ssl%2Fssl_sess.c;fp=ssl%2Fssl_sess.c;h=e52635d08776e9d63f2ef4ea6eca21813b894d4b;hp=942b1b82ceccd3b9fb4b6fe4575f34f6450a3c77;hb=340fe504e42e3e4b6399caff165097cedc994c5e;hpb=425e972dfaf867affb5b3d438d9ca67bb6aeed65 diff --git a/ssl/ssl_sess.c b/ssl/ssl_sess.c index 942b1b82ce..e52635d087 100644 --- a/ssl/ssl_sess.c +++ b/ssl/ssl_sess.c @@ -26,35 +26,22 @@ static int remove_session_lock(SSL_CTX *ctx, SSL_SESSION *c, int lck); DEFINE_STACK_OF(SSL_SESSION) -__owur static int sess_timedout(time_t t, SSL_SESSION *ss) +__owur static ossl_inline int sess_timedout(time_t t, SSL_SESSION *ss) { - /* if timeout overflowed, it can never timeout! */ - if (ss->timeout_ovf) - return 0; - return t > ss->calc_timeout; + return ossl_time_compare(ossl_time_from_time_t(t), ss->calc_timeout) > 0; } /* * Returns -1/0/+1 as other XXXcmp-type functions - * Takes overflow of calculated timeout into consideration + * Takes calculated timeout into consideration */ -__owur static int timeoutcmp(SSL_SESSION *a, SSL_SESSION *b) +__owur static ossl_inline int timeoutcmp(SSL_SESSION *a, SSL_SESSION *b) { - /* if only one overflowed, then it is greater */ - if (a->timeout_ovf && !b->timeout_ovf) - return 1; - if (!a->timeout_ovf && b->timeout_ovf) - return -1; - /* No overflow, or both overflowed, so straight compare is safe */ - if (a->calc_timeout < b->calc_timeout) - return -1; - if (a->calc_timeout > b->calc_timeout) - return 1; - return 0; + return ossl_time_compare(a->calc_timeout, b->calc_timeout); } /* - * Calculates effective timeout, saving overflow state + * Calculates effective timeout * Locking must be done by the caller of this function */ void ssl_session_calculate_timeout(SSL_SESSION *ss) @@ -62,18 +49,9 @@ void ssl_session_calculate_timeout(SSL_SESSION *ss) /* Force positive timeout */ if (ss->timeout < 0) ss->timeout = 0; - ss->calc_timeout = ss->time + ss->timeout; - /* - * |timeout| is always zero or positive, so the check for - * overflow only needs to consider if |time| is positive - */ - ss->timeout_ovf = ss->time > 0 && ss->calc_timeout < ss->time; - /* - * N.B. Realistic overflow can only occur in our lifetimes on a - * 32-bit machine in January 2038. - * However, There are no controls to limit the |timeout| - * value, except to keep it positive. - */ + + ss->calc_timeout = ossl_time_add(ossl_time_from_time_t(ss->time), + ossl_time_from_time_t(ss->timeout)); } /*