From: Randall S. Becker Date: Mon, 25 Mar 2024 19:30:53 +0000 (+0000) Subject: Correct ossl_sleep for threaded model by introducing sleep(). X-Git-Tag: openssl-3.1.6~38 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7614c26f5f75af088aefbf61c7dea83dab61488b;p=thirdparty%2Fopenssl.git Correct ossl_sleep for threaded model by introducing sleep(). This fix handles situations where ossl_sleep() receives a millis value equal or greater than 1000, which breaks platforms where this is not legal. The change also avoids unnecessarily calling sleep(0). Fixes: #23961 Signed-off-by: Randall S. Becker Reviewed-by: Tom Cosgrove Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/23972) (cherry picked from commit c263b1fd692bd610b1a3879a9cdad74f3ffe321d) --- diff --git a/include/internal/e_os.h b/include/internal/e_os.h index 7fdc3899823..c7802d6e6cf 100644 --- a/include/internal/e_os.h +++ b/include/internal/e_os.h @@ -296,20 +296,18 @@ static ossl_inline void ossl_sleep(unsigned long millis) ts.tv_sec = (long int) (millis / 1000); ts.tv_nsec = (long int) (millis % 1000) * 1000000ul; nanosleep(&ts, NULL); -# elif defined(__TANDEM) -# if !defined(_REENTRANT) +# elif defined(__TANDEM) && !defined(_REENTRANT) # include + /* HPNS does not support usleep for non threaded apps */ PROCESS_DELAY_(millis * 1000); -# elif defined(_SPT_MODEL_) -# include -# include - usleep(millis * 1000); -# else - usleep(millis * 1000); -# endif # else - usleep(millis * 1000); + unsigned int s = (unsigned int)(millis / 1000); + unsigned int us = (unsigned int)((millis % 1000) * 1000); + + if (s > 0) + sleep(s); + usleep(us); # endif } #elif defined(_WIN32)