Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Backport 2.28: Fix builds with MBEDTLS_HAVE_TIME disabled and test #5563

Merged
merged 16 commits into from
Mar 15, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions ChangeLog.d/timeless.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Bugfix
* Fix compile errors when MBEDTLS_HAVE_TIME is not defined. Add tests
to catch bad uses of time.h.
2 changes: 2 additions & 0 deletions include/mbedtls/platform.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,9 @@ extern "C" {
#if !defined(MBEDTLS_PLATFORM_NO_STD_FUNCTIONS)
#include <stdio.h>
#include <stdlib.h>
#if defined(MBEDTLS_HAVE_TIME)
#include <time.h>
#endif
#if !defined(MBEDTLS_PLATFORM_STD_SNPRINTF)
#if defined(MBEDTLS_PLATFORM_HAS_NON_CONFORMING_SNPRINTF)
#define MBEDTLS_PLATFORM_STD_SNPRINTF mbedtls_platform_win32_snprintf /**< The default \c snprintf function to use. */
Expand Down
2 changes: 2 additions & 0 deletions library/net_sockets.c
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,9 @@ static int wsa_init_done = 0;

#include <stdio.h>

#if defined(MBEDTLS_HAVE_TIME)
#include <time.h>
#endif

#include <stdint.h>

Expand Down
48 changes: 44 additions & 4 deletions library/timing.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,17 +56,18 @@ struct _hr_time

#include <unistd.h>
#include <sys/types.h>
#include <sys/time.h>
#include <signal.h>
#if defined(MBEDTLS_HAVE_TIME)
#include <time.h>

#include <sys/time.h>
struct _hr_time
{
struct timeval start;
};

#endif
#endif /* _WIN32 && !EFIX64 && !EFI32 */

#if defined(MBEDTLS_HAVE_TIME)
#if !defined(HAVE_HARDCLOCK) && defined(MBEDTLS_HAVE_ASM) && \
( defined(_MSC_VER) && defined(_M_IX86) ) || defined(__WATCOMC__)

Expand Down Expand Up @@ -364,7 +365,6 @@ int mbedtls_timing_get_delay( void *data )
return( 0 );
}

#endif /* !MBEDTLS_TIMING_ALT */

#if defined(MBEDTLS_SELF_TEST)

Expand Down Expand Up @@ -527,4 +527,44 @@ int mbedtls_timing_self_test( int verbose )

#endif /* MBEDTLS_SELF_TEST */

#else
volatile int mbedtls_timing_alarmed = 0;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not really related to this particular change, but volatile is insufficient to make this code correct on non-strongly ordered SMP targets (e.g. Arm).

int mbedtls_timing_get_delay( void *data )
{
(void) data;
return( 0 );
}

void mbedtls_timing_set_delay( void *data, uint32_t int_ms, uint32_t fin_ms )
{
(void) data;
(void) int_ms;
(void) fin_ms;
}

unsigned long mbedtls_timing_get_timer( struct mbedtls_timing_hr_time *val, int reset )
{
(void) val;
(void) reset;
return( 0 );
}

unsigned long mbedtls_timing_hardclock( void )
{
return( 0 );
}

void mbedtls_set_alarm( int seconds )
{
(void) seconds;
}
#if defined(MBEDTLS_SELF_TEST)
int mbedtls_timing_self_test( int verbose )
{
(void) verbose;
return( 0 );
}
#endif /* MBEDTLS_SELF_TEST */
#endif /* MBEDTLS_HAVE_TIME */
#endif /* !MBEDTLS_TIMING_ALT */
#endif /* MBEDTLS_TIMING_C */
2 changes: 2 additions & 0 deletions library/x509_crl.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,13 @@
#define mbedtls_snprintf snprintf
#endif

#if defined(MBEDTLS_HAVE_TIME)
#if defined(_WIN32) && !defined(EFIX64) && !defined(EFI32)
#include <windows.h>
#else
#include <time.h>
#endif
#endif

#if defined(MBEDTLS_FS_IO) || defined(EFIX64) || defined(EFI32)
#include <stdio.h>
Expand Down
2 changes: 2 additions & 0 deletions library/x509_crt.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,13 @@
#include "mbedtls/threading.h"
#endif

#if defined(MBEDTLS_HAVE_TIME)
#if defined(_WIN32) && !defined(EFIX64) && !defined(EFI32)
#include <windows.h>
#else
#include <time.h>
#endif
#endif

#if defined(MBEDTLS_FS_IO)
#include <stdio.h>
Expand Down
2 changes: 2 additions & 0 deletions programs/fuzz/common.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@
#include <stdlib.h>
#include "mbedtls/ctr_drbg.h"

#if defined(MBEDTLS_PLATFORM_TIME_ALT)
mbedtls_time_t dummy_constant_time( mbedtls_time_t* time )
{
(void) time;
return 0x5af2a056;
}
#endif

void dummy_init()
{
Expand Down
11 changes: 11 additions & 0 deletions programs/fuzz/common.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,13 @@
#if !defined(MBEDTLS_CONFIG_FILE)
#include "mbedtls/config.h"
#else
#include MBEDTLS_CONFIG_FILE
#endif

#if defined(MBEDTLS_HAVE_TIME)
#include "mbedtls/platform_time.h"
#endif
#include <stddef.h>
#include <stdint.h>

typedef struct fuzzBufferOffset
Expand All @@ -8,7 +17,9 @@ typedef struct fuzzBufferOffset
size_t Offset;
} fuzzBufferOffset_t;

#if defined(MBEDTLS_HAVE_TIME)
mbedtls_time_t dummy_constant_time( mbedtls_time_t* time );
#endif
void dummy_init();

int dummy_send( void *ctx, const unsigned char *buf, size_t len );
Expand Down
13 changes: 10 additions & 3 deletions programs/ssl/ssl_context_info.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,9 @@ int main( void )
#include <stdint.h>
#include <stdarg.h>
#include <string.h>
#if defined(MBEDTLS_HAVE_TIME)
#include <time.h>
#endif
#include "mbedtls/ssl.h"
#include "mbedtls/error.h"
#include "mbedtls/base64.h"
Expand Down Expand Up @@ -310,10 +312,11 @@ void print_hex( const uint8_t *b, size_t len,
/*
* Print the value of time_t in format e.g. 2020-01-23 13:05:59
*/
void print_time( const time_t *time )
void print_time( const uint64_t *time )
{
#if defined(MBEDTLS_HAVE_TIME)
char buf[20];
struct tm *t = gmtime( time );
struct tm *t = gmtime( (time_t*) time );
static const char format[] = "%Y-%m-%d %H:%M:%S";
if( NULL != t )
{
Expand All @@ -324,6 +327,10 @@ void print_time( const time_t *time )
{
printf( "unknown\n" );
}
#else
(void) time;
printf( "not supported\n" );
#endif
}

/*
Expand Down Expand Up @@ -609,7 +616,7 @@ void print_deserialized_ssl_session( const uint8_t *ssl, uint32_t len,
( (uint64_t) ssl[7] );
ssl += 8;
printf( "\tstart time : " );
print_time( (time_t*) &start );
print_time( &start );
}

CHECK_SSL_END( 2 );
Expand Down
19 changes: 17 additions & 2 deletions programs/ssl/ssl_server2.c
Original file line number Diff line number Diff line change
Expand Up @@ -310,10 +310,16 @@ int main( void )

#if defined(MBEDTLS_SSL_CACHE_C)
#define USAGE_CACHE \
" cache_max=%%d default: cache default (50)\n" \
" cache_max=%%d default: cache default (50)\n"
#if defined(MBEDTLS_HAVE_TIME)
#define USAGE_CACHE_TIME \
" cache_timeout=%%d default: cache default (1d)\n"
#else
#define USAGE_CACHE_TIME ""
#endif
#else
#define USAGE_CACHE ""
#define USAGE_CACHE_TIME ""
#endif /* MBEDTLS_SSL_CACHE_C */

#if defined(SNI_OPTION)
Expand Down Expand Up @@ -494,6 +500,7 @@ int main( void )
USAGE_NSS_KEYLOG \
USAGE_NSS_KEYLOG_FILE \
USAGE_CACHE \
USAGE_CACHE_TIME \
USAGE_MAX_FRAG_LEN \
USAGE_TRUNC_HMAC \
USAGE_ALPN \
Expand Down Expand Up @@ -593,7 +600,9 @@ struct options
int tickets; /* enable / disable session tickets */
int ticket_timeout; /* session ticket lifetime */
int cache_max; /* max number of session cache entries */
int cache_timeout; /* expiration delay of session cache entries */
#if defined(MBEDTLS_HAVE_TIME)
int cache_timeout; /* expiration delay of session cache entries*/
#endif
char *sni; /* string describing sni information */
const char *curves; /* list of supported elliptic curves */
const char *alpn_string; /* ALPN supported protocols */
Expand Down Expand Up @@ -1512,7 +1521,9 @@ int main( int argc, char *argv[] )
opt.tickets = DFL_TICKETS;
opt.ticket_timeout = DFL_TICKET_TIMEOUT;
opt.cache_max = DFL_CACHE_MAX;
#if defined(MBEDTLS_HAVE_TIME)
opt.cache_timeout = DFL_CACHE_TIMEOUT;
#endif
opt.sni = DFL_SNI;
opt.alpn_string = DFL_ALPN_STRING;
opt.curves = DFL_CURVES;
Expand Down Expand Up @@ -1896,12 +1907,14 @@ int main( int argc, char *argv[] )
if( opt.cache_max < 0 )
goto usage;
}
#if defined(MBEDTLS_HAVE_TIME)
else if( strcmp( p, "cache_timeout" ) == 0 )
{
opt.cache_timeout = atoi( q );
if( opt.cache_timeout < 0 )
goto usage;
}
#endif
else if( strcmp( p, "cookies" ) == 0 )
{
opt.cookies = atoi( q );
Expand Down Expand Up @@ -2705,8 +2718,10 @@ int main( int argc, char *argv[] )
if( opt.cache_max != -1 )
mbedtls_ssl_cache_set_max_entries( &cache, opt.cache_max );

#if defined(MBEDTLS_HAVE_TIME)
if( opt.cache_timeout != -1 )
mbedtls_ssl_cache_set_timeout( &cache, opt.cache_timeout );
#endif

mbedtls_ssl_conf_session_cache( &conf, &cache,
mbedtls_ssl_cache_get,
Expand Down
2 changes: 2 additions & 0 deletions programs/ssl/ssl_test_lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,13 @@ void my_debug( void *ctx, int level,
fflush( (FILE *) ctx );
}

#if defined(MBEDTLS_HAVE_TIME)
mbedtls_time_t dummy_constant_time( mbedtls_time_t* time )
{
(void) time;
return 0x5af2a056;
}
#endif

#if !defined(MBEDTLS_TEST_USE_PSA_CRYPTO_RNG)
static int dummy_entropy( void *data, unsigned char *output, size_t len )
Expand Down
2 changes: 2 additions & 0 deletions programs/ssl/ssl_test_lib.h
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,9 @@ void my_debug( void *ctx, int level,
const char *file, int line,
const char *str );

#if defined(MBEDTLS_HAVE_TIME)
mbedtls_time_t dummy_constant_time( mbedtls_time_t* time );
#endif

#if defined(MBEDTLS_USE_PSA_CRYPTO)
/* If MBEDTLS_TEST_USE_PSA_CRYPTO_RNG is defined, the SSL test programs will use
Expand Down
2 changes: 2 additions & 0 deletions programs/test/query_config.c
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,9 @@
#include "mbedtls/pkcs11.h"
#include "mbedtls/pkcs12.h"
#include "mbedtls/pkcs5.h"
#if defined(MBEDTLS_HAVE_TIME)
#include "mbedtls/platform_time.h"
#endif
#include "mbedtls/platform_util.h"
#include "mbedtls/poly1305.h"
#include "mbedtls/ripemd160.h"
Expand Down
8 changes: 7 additions & 1 deletion programs/test/udp_proxy.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,11 @@
#else
#include <stdio.h>
#include <stdlib.h>
#if defined(MBEDTLS_HAVE_TIME)
#include <time.h>
#define mbedtls_time time
#define mbedtls_time_t time_t
#endif
#define mbedtls_printf printf
#define mbedtls_calloc calloc
#define mbedtls_free free
Expand Down Expand Up @@ -73,7 +75,9 @@ int main( void )
#endif
#endif /* _MSC_VER */
#else /* ( _WIN32 || _WIN32_WCE ) && !EFIX64 && !EFI32 */
#if defined(MBEDTLS_HAVE_TIME)
#include <sys/time.h>
#endif
#include <sys/types.h>
#include <unistd.h>
#endif /* ( _WIN32 || _WIN32_WCE ) && !EFIX64 && !EFI32 */
Expand Down Expand Up @@ -823,6 +827,7 @@ int main( int argc, char *argv[] )

get_options( argc, argv );

#if defined(MBEDTLS_HAVE_TIME)
/*
* Decisions to drop/delay/duplicate packets are pseudo-random: dropping
* exactly 1 in N packets would lead to problems when a flight has exactly
Expand All @@ -833,11 +838,12 @@ int main( int argc, char *argv[] )
*/
if( opt.seed == 0 )
{
opt.seed = (unsigned int) time( NULL );
opt.seed = (unsigned int) mbedtls_time( NULL );
mbedtls_printf( " . Pseudo-random seed: %u\n", opt.seed );
}

srand( opt.seed );
#endif /* MBEDTLS_HAVE_TIME */

/*
* 0. "Connect" to the server
Expand Down
2 changes: 2 additions & 0 deletions scripts/data_files/query_config.fmt
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,9 @@
#include "mbedtls/pkcs11.h"
#include "mbedtls/pkcs12.h"
#include "mbedtls/pkcs5.h"
#if defined(MBEDTLS_HAVE_TIME)
#include "mbedtls/platform_time.h"
#endif
#include "mbedtls/platform_util.h"
#include "mbedtls/poly1305.h"
#include "mbedtls/ripemd160.h"
Expand Down
3 changes: 3 additions & 0 deletions tests/configs/config-wrapper-malloc-0-null.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
#include "mbedtls/config.h"

#include <stdlib.h>

#ifndef MBEDTLS_PLATFORM_STD_CALLOC
static inline void *custom_calloc( size_t nmemb, size_t size )
{
if( nmemb == 0 || size == 0 )
Expand All @@ -33,5 +35,6 @@ static inline void *custom_calloc( size_t nmemb, size_t size )

#define MBEDTLS_PLATFORM_MEMORY
#define MBEDTLS_PLATFORM_STD_CALLOC custom_calloc
#endif

#endif /* MBEDTLS_CONFIG_H */
Loading