Merge pull request #8636 from paul-elliott-arm/new_test_thread_interface
New test thread interface
This commit is contained in:
commit
7a28738205
27 changed files with 233 additions and 91 deletions
8
3rdparty/everest/Makefile.inc
vendored
8
3rdparty/everest/Makefile.inc
vendored
|
@ -1,6 +1,6 @@
|
|||
THIRDPARTY_INCLUDES+=-I../3rdparty/everest/include -I../3rdparty/everest/include/everest -I../3rdparty/everest/include/everest/kremlib
|
||||
THIRDPARTY_INCLUDES+=-I$(THIRDPARTY_DIR)/everest/include -I$(THIRDPARTY_DIR)/everest/include/everest -I$(THIRDPARTY_DIR)/everest/include/everest/kremlib
|
||||
|
||||
THIRDPARTY_CRYPTO_OBJECTS+= \
|
||||
../3rdparty/everest/library/everest.o \
|
||||
../3rdparty/everest/library/x25519.o \
|
||||
../3rdparty/everest/library/Hacl_Curve25519_joined.o
|
||||
$(THIRDPARTY_DIR)/everest/library/everest.o \
|
||||
$(THIRDPARTY_DIR)/everest/library/x25519.o \
|
||||
$(THIRDPARTY_DIR)/everest/library/Hacl_Curve25519_joined.o
|
||||
|
|
6
3rdparty/p256-m/Makefile.inc
vendored
6
3rdparty/p256-m/Makefile.inc
vendored
|
@ -1,5 +1,5 @@
|
|||
THIRDPARTY_INCLUDES+=-I../3rdparty/p256-m/p256-m/include -I../3rdparty/p256-m/p256-m/include/p256-m -I../3rdparty/p256-m/p256-m_driver_interface
|
||||
THIRDPARTY_INCLUDES+=-I$(THIRDPARTY_DIR)/p256-m/p256-m/include -I$(THIRDPARTY_DIR)/p256-m/p256-m/include/p256-m -I$(THIRDPARTY_DIR)/p256-m/p256-m_driver_interface
|
||||
|
||||
THIRDPARTY_CRYPTO_OBJECTS+= \
|
||||
../3rdparty/p256-m//p256-m_driver_entrypoints.o \
|
||||
../3rdparty/p256-m//p256-m/p256-m.o
|
||||
$(THIRDPARTY_DIR)/p256-m//p256-m_driver_entrypoints.o \
|
||||
$(THIRDPARTY_DIR)/p256-m//p256-m/p256-m.o
|
||||
|
|
|
@ -114,6 +114,11 @@ if(MBEDTLS_PYTHON_EXECUTABLE)
|
|||
|
||||
endif()
|
||||
|
||||
# We now potentially need to link all executables against PThreads, if available
|
||||
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
|
||||
set(THREADS_PREFER_PTHREAD_FLAG TRUE)
|
||||
find_package(Threads)
|
||||
|
||||
# If this is the root project add longer list of available CMAKE_BUILD_TYPE values
|
||||
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
|
||||
set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE}
|
||||
|
|
|
@ -231,7 +231,7 @@ if(HAIKU)
|
|||
endif(HAIKU)
|
||||
|
||||
if(LINK_WITH_PTHREAD)
|
||||
set(libs ${libs} pthread)
|
||||
set(libs ${libs} ${CMAKE_THREAD_LIBS_INIT})
|
||||
endif()
|
||||
|
||||
if(LINK_WITH_TRUSTED_STORAGE)
|
||||
|
|
|
@ -114,7 +114,7 @@ all: fuzz
|
|||
endif
|
||||
|
||||
fuzz: ${MBEDTLS_TEST_OBJS}
|
||||
$(MAKE) -C fuzz THIRDPARTY_INCLUDES=$(THIRDPARTY_INCLUDES)
|
||||
$(MAKE) -C fuzz
|
||||
|
||||
${MBEDTLS_TEST_OBJS}:
|
||||
$(MAKE) -C ../tests mbedtls_test
|
||||
|
|
|
@ -4,7 +4,7 @@ set(executables
|
|||
|
||||
foreach(exe IN LISTS executables)
|
||||
add_executable(${exe} ${exe}.c $<TARGET_OBJECTS:mbedtls_test>)
|
||||
target_link_libraries(${exe} ${mbedcrypto_target})
|
||||
target_link_libraries(${exe} ${mbedcrypto_target} ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_include_directories(${exe} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../tests/include)
|
||||
endforeach()
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ set(executables
|
|||
|
||||
foreach(exe IN LISTS executables)
|
||||
add_executable(${exe} ${exe}.c $<TARGET_OBJECTS:mbedtls_test>)
|
||||
target_link_libraries(${exe} ${mbedcrypto_target})
|
||||
target_link_libraries(${exe} ${mbedcrypto_target} ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_include_directories(${exe} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../tests/include)
|
||||
endforeach()
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
set(libs
|
||||
${mbedtls_target}
|
||||
${CMAKE_THREAD_LIBS_INIT}
|
||||
)
|
||||
|
||||
find_library(FUZZINGENGINE_LIB FuzzingEngine)
|
||||
|
|
|
@ -1,36 +1,14 @@
|
|||
MBEDTLS_TEST_PATH:=../../tests/src
|
||||
MBEDTLS_TEST_OBJS:=$(patsubst %.c,%.o,$(wildcard ${MBEDTLS_TEST_PATH}/*.c ${MBEDTLS_TEST_PATH}/drivers/*.c))
|
||||
MBEDTLS_TEST_PATH:=../../tests
|
||||
|
||||
CFLAGS ?= -O2
|
||||
WARNING_CFLAGS ?= -Wall -Wextra
|
||||
LOCAL_CFLAGS = $(WARNING_CFLAGS) -I../../tests/include -I../../include -D_FILE_OFFSET_BITS=64
|
||||
LOCAL_LDFLAGS = ${MBEDTLS_TEST_OBJS} \
|
||||
-L../../library \
|
||||
-lmbedtls$(SHARED_SUFFIX) \
|
||||
-lmbedx509$(SHARED_SUFFIX) \
|
||||
-lmbedcrypto$(SHARED_SUFFIX)
|
||||
MBEDTLS_PATH := ../..
|
||||
include ../../scripts/common.make
|
||||
|
||||
LOCAL_CFLAGS += $(patsubst -I../%,-I../../%,$(THIRDPARTY_INCLUDES))
|
||||
|
||||
ifndef SHARED
|
||||
DEP=../../library/libmbedcrypto.a ../../library/libmbedx509.a ../../library/libmbedtls.a
|
||||
else
|
||||
DEP=../../library/libmbedcrypto.$(DLEXT) ../../library/libmbedx509.$(DLEXT) ../../library/libmbedtls.$(DLEXT)
|
||||
endif
|
||||
|
||||
|
||||
DLEXT ?= so
|
||||
EXEXT=
|
||||
SHARED_SUFFIX=
|
||||
DEP=${MBEDLIBS}
|
||||
|
||||
ifdef FUZZINGENGINE
|
||||
LOCAL_LDFLAGS += -lFuzzingEngine
|
||||
endif
|
||||
|
||||
ifdef WINDOWS_BUILD
|
||||
LOCAL_LDFLAGS += -lbcrypt
|
||||
endif
|
||||
|
||||
# A test application is built for each suites/test_suite_*.data file.
|
||||
# Application name is same as .data file's base name and can be
|
||||
# constructed by stripping path 'suites/' and extension .data.
|
||||
|
@ -45,9 +23,6 @@ BINARIES := $(addsuffix $(EXEXT),$(APPS))
|
|||
|
||||
all: $(BINARIES)
|
||||
|
||||
$(DEP):
|
||||
$(MAKE) -C ../../library
|
||||
|
||||
C_FILES := $(addsuffix .c,$(APPS))
|
||||
|
||||
%.o: %.c
|
||||
|
|
|
@ -6,7 +6,7 @@ set(executables
|
|||
|
||||
foreach(exe IN LISTS executables)
|
||||
add_executable(${exe} ${exe}.c $<TARGET_OBJECTS:mbedtls_test>)
|
||||
target_link_libraries(${exe} ${mbedcrypto_target})
|
||||
target_link_libraries(${exe} ${mbedcrypto_target} ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_include_directories(${exe} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../tests/include)
|
||||
endforeach()
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ set(executables_mbedtls
|
|||
|
||||
foreach(exe IN LISTS executables_mbedtls)
|
||||
add_executable(${exe} ${exe}.c $<TARGET_OBJECTS:mbedtls_test>)
|
||||
target_link_libraries(${exe} ${mbedtls_target})
|
||||
target_link_libraries(${exe} ${mbedtls_target} ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_include_directories(${exe} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../tests/include)
|
||||
endforeach()
|
||||
|
||||
|
@ -32,7 +32,7 @@ set(executables_mbedcrypto
|
|||
|
||||
foreach(exe IN LISTS executables_mbedcrypto)
|
||||
add_executable(${exe} ${exe}.c $<TARGET_OBJECTS:mbedtls_test>)
|
||||
target_link_libraries(${exe} ${mbedcrypto_target})
|
||||
target_link_libraries(${exe} ${mbedcrypto_target} ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_include_directories(${exe} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../tests/include)
|
||||
endforeach()
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ endif()
|
|||
|
||||
foreach(exe IN LISTS executables)
|
||||
add_executable(${exe} ${exe}.c $<TARGET_OBJECTS:mbedtls_test>)
|
||||
target_link_libraries(${exe} ${mbedcrypto_target})
|
||||
target_link_libraries(${exe} ${mbedcrypto_target} ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_include_directories(${exe} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../tests/include)
|
||||
endforeach()
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ set(executables
|
|||
|
||||
foreach(exe IN LISTS executables)
|
||||
add_executable(${exe} ${exe}.c $<TARGET_OBJECTS:mbedtls_test>)
|
||||
target_link_libraries(${exe} ${mbedcrypto_target})
|
||||
target_link_libraries(${exe} ${mbedcrypto_target} ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_include_directories(${exe} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../tests/include)
|
||||
endforeach()
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
set(THREADS_USE_PTHREADS_WIN32 true)
|
||||
find_package(Threads)
|
||||
|
||||
set(libs
|
||||
|
@ -39,7 +38,7 @@ foreach(exe IN LISTS executables)
|
|||
endif()
|
||||
add_executable(${exe} ${exe}.c $<TARGET_OBJECTS:mbedtls_test>
|
||||
${extra_sources})
|
||||
target_link_libraries(${exe} ${libs})
|
||||
target_link_libraries(${exe} ${libs} ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_include_directories(${exe} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../tests/include)
|
||||
if(exe STREQUAL "ssl_client2" OR exe STREQUAL "ssl_server2")
|
||||
if(GEN_FILES)
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
#include "ssl_test_lib.h"
|
||||
|
||||
#if defined(MBEDTLS_TEST_HOOKS)
|
||||
#include "test/helpers.h"
|
||||
#include "test/threading_helpers.h"
|
||||
#endif
|
||||
|
||||
#if !defined(MBEDTLS_SSL_TEST_IMPOSSIBLE)
|
||||
|
|
|
@ -26,7 +26,7 @@ if(TEST_CPP)
|
|||
)
|
||||
add_executable(cpp_dummy_build "${cpp_dummy_build_cpp}")
|
||||
target_include_directories(cpp_dummy_build PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../include)
|
||||
target_link_libraries(cpp_dummy_build ${mbedcrypto_target})
|
||||
target_link_libraries(cpp_dummy_build ${mbedcrypto_target} ${CMAKE_THREAD_LIBS_INIT})
|
||||
endif()
|
||||
|
||||
if(USE_SHARED_MBEDTLS_LIBRARY AND
|
||||
|
@ -81,9 +81,9 @@ foreach(exe IN LISTS executables_libs executables_mbedcrypto)
|
|||
# This emulates "if ( ... IN_LIST ... )" which becomes available in CMake 3.3
|
||||
list(FIND executables_libs ${exe} exe_index)
|
||||
if (${exe_index} GREATER -1)
|
||||
target_link_libraries(${exe} ${libs})
|
||||
target_link_libraries(${exe} ${libs} ${CMAKE_THREAD_LIBS_INIT})
|
||||
else()
|
||||
target_link_libraries(${exe} ${mbedcrypto_target})
|
||||
target_link_libraries(${exe} ${mbedcrypto_target} ${CMAKE_THREAD_LIBS_INIT})
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
|
|
|
@ -20,4 +20,4 @@ set(libs
|
|||
)
|
||||
|
||||
add_executable(cmake_subproject cmake_subproject.c)
|
||||
target_link_libraries(cmake_subproject ${libs})
|
||||
target_link_libraries(cmake_subproject ${libs} ${CMAKE_THREAD_LIBS_INIT})
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
#include <mbedtls/platform.h>
|
||||
#include <mbedtls/platform_util.h>
|
||||
#include "test/helpers.h"
|
||||
#include "test/threading_helpers.h"
|
||||
#include "test/macros.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
|
|
@ -9,7 +9,7 @@ set(executables
|
|||
|
||||
foreach(exe IN LISTS executables)
|
||||
add_executable(${exe} ${exe}.c $<TARGET_OBJECTS:mbedtls_test>)
|
||||
target_link_libraries(${exe} ${libs})
|
||||
target_link_libraries(${exe} ${libs} ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_include_directories(${exe} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../tests/include)
|
||||
endforeach()
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ set(executables
|
|||
|
||||
foreach(exe IN LISTS executables)
|
||||
add_executable(${exe} ${exe}.c $<TARGET_OBJECTS:mbedtls_test>)
|
||||
target_link_libraries(${exe} ${libs})
|
||||
target_link_libraries(${exe} ${libs} ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_include_directories(${exe} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../tests/include)
|
||||
endforeach()
|
||||
|
||||
|
|
|
@ -1,25 +1,29 @@
|
|||
# To compile on SunOS: add "-lsocket -lnsl" to LDFLAGS
|
||||
|
||||
ifndef MBEDTLS_PATH
|
||||
MBEDTLS_PATH := ..
|
||||
endif
|
||||
|
||||
CFLAGS ?= -O2
|
||||
WARNING_CFLAGS ?= -Wall -Wextra -Wformat=2 -Wno-format-nonliteral
|
||||
WARNING_CXXFLAGS ?= -Wall -Wextra -Wformat=2 -Wno-format-nonliteral
|
||||
LDFLAGS ?=
|
||||
|
||||
LOCAL_CFLAGS = $(WARNING_CFLAGS) -I$(MBEDTLS_TEST_PATH)/include -I../include -D_FILE_OFFSET_BITS=64
|
||||
LOCAL_CXXFLAGS = $(WARNING_CXXFLAGS) -I../include -I../tests/include -D_FILE_OFFSET_BITS=64
|
||||
LOCAL_CFLAGS = $(WARNING_CFLAGS) -I$(MBEDTLS_TEST_PATH)/include -I$(MBEDTLS_PATH)/include -D_FILE_OFFSET_BITS=64
|
||||
LOCAL_CXXFLAGS = $(WARNING_CXXFLAGS) -I$(MBEDTLS_PATH)/include -I$(MBEDTLS_PATH)/tests/include -D_FILE_OFFSET_BITS=64
|
||||
LOCAL_LDFLAGS = ${MBEDTLS_TEST_OBJS} \
|
||||
-L../library \
|
||||
-L$(MBEDTLS_PATH)/library \
|
||||
-lmbedtls$(SHARED_SUFFIX) \
|
||||
-lmbedx509$(SHARED_SUFFIX) \
|
||||
-lmbedcrypto$(SHARED_SUFFIX)
|
||||
|
||||
include ../3rdparty/Makefile.inc
|
||||
include $(MBEDTLS_PATH)/3rdparty/Makefile.inc
|
||||
LOCAL_CFLAGS+=$(THIRDPARTY_INCLUDES)
|
||||
|
||||
ifndef SHARED
|
||||
MBEDLIBS=../library/libmbedcrypto.a ../library/libmbedx509.a ../library/libmbedtls.a
|
||||
MBEDLIBS=$(MBEDTLS_PATH)/library/libmbedcrypto.a $(MBEDTLS_PATH)/library/libmbedx509.a $(MBEDTLS_PATH)/library/libmbedtls.a
|
||||
else
|
||||
MBEDLIBS=../library/libmbedcrypto.$(DLEXT) ../library/libmbedx509.$(DLEXT) ../library/libmbedtls.$(DLEXT)
|
||||
MBEDLIBS=$(MBEDTLS_PATH)/library/libmbedcrypto.$(DLEXT) $(MBEDTLS_PATH)/library/libmbedx509.$(DLEXT) $(MBEDTLS_PATH)/library/libmbedtls.$(DLEXT)
|
||||
endif
|
||||
|
||||
ifdef DEBUG
|
||||
|
@ -97,7 +101,7 @@ endif
|
|||
default: all
|
||||
|
||||
$(MBEDLIBS):
|
||||
$(MAKE) -C ../library
|
||||
$(MAKE) -C $(MBEDTLS_PATH)/library
|
||||
|
||||
neat: clean
|
||||
ifndef WINDOWS
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
find_package(Threads)
|
||||
|
||||
set(libs
|
||||
${mbedtls_target}
|
||||
${CMAKE_THREAD_LIBS_INIT}
|
||||
|
|
|
@ -39,11 +39,7 @@
|
|||
# endif
|
||||
#endif
|
||||
|
||||
#if defined(MBEDTLS_THREADING_C) && defined(MBEDTLS_THREADING_PTHREAD) && \
|
||||
defined(MBEDTLS_TEST_HOOKS)
|
||||
#define MBEDTLS_TEST_MUTEX_USAGE
|
||||
#endif
|
||||
|
||||
#include "test/threading_helpers.h"
|
||||
#include "mbedtls/platform.h"
|
||||
|
||||
#include <stddef.h>
|
||||
|
@ -258,24 +254,6 @@ int mbedtls_test_hexcmp(uint8_t *a, uint8_t *b,
|
|||
#include "test/fake_external_rng_for_test.h"
|
||||
#endif
|
||||
|
||||
#if defined(MBEDTLS_TEST_MUTEX_USAGE)
|
||||
/**
|
||||
* Activate the mutex usage verification framework. See threading_helpers.c for
|
||||
* information.
|
||||
* */
|
||||
void mbedtls_test_mutex_usage_init(void);
|
||||
|
||||
/**
|
||||
* Deactivate the mutex usage verification framework. See threading_helpers.c
|
||||
* for information.
|
||||
*/
|
||||
void mbedtls_test_mutex_usage_end(void);
|
||||
|
||||
/** Call this function after executing a test case to check for mutex usage
|
||||
* errors. */
|
||||
void mbedtls_test_mutex_usage_check(void);
|
||||
#endif /* MBEDTLS_TEST_MUTEX_USAGE */
|
||||
|
||||
#if defined(MBEDTLS_TEST_HOOKS)
|
||||
/**
|
||||
* \brief Check that only a pure high-level error code is being combined with
|
||||
|
|
112
tests/include/test/threading_helpers.h
Normal file
112
tests/include/test/threading_helpers.h
Normal file
|
@ -0,0 +1,112 @@
|
|||
/**
|
||||
* \file threading_helpers.h
|
||||
*
|
||||
* \brief This file contains the prototypes of helper functions for the purpose
|
||||
* of testing threading.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright The Mbed TLS Contributors
|
||||
* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#ifndef THREADING_HELPERS_H
|
||||
#define THREADING_HELPERS_H
|
||||
|
||||
#if defined MBEDTLS_THREADING_C
|
||||
|
||||
#include "mbedtls/private_access.h"
|
||||
#include "mbedtls/build_info.h"
|
||||
|
||||
/* Most fields of publicly available structs are private and are wrapped with
|
||||
* MBEDTLS_PRIVATE macro. This define allows tests to access the private fields
|
||||
* directly (without using the MBEDTLS_PRIVATE wrapper). */
|
||||
#define MBEDTLS_ALLOW_PRIVATE_ACCESS
|
||||
|
||||
#define MBEDTLS_ERR_THREADING_THREAD_ERROR -0x001F
|
||||
|
||||
#if defined(MBEDTLS_THREADING_PTHREAD)
|
||||
#include <pthread.h>
|
||||
#endif /* MBEDTLS_THREADING_PTHREAD */
|
||||
|
||||
#if defined(MBEDTLS_THREADING_ALT)
|
||||
/* You should define the mbedtls_test_thread_t type in your header */
|
||||
#include "threading_alt.h"
|
||||
|
||||
/**
|
||||
* \brief Set your alternate threading implementation
|
||||
* function pointers for test threads. If used, this
|
||||
* function must be called once in the main thread
|
||||
* before any other MbedTLS function is called.
|
||||
*
|
||||
* \note These functions are part of the testing API only and
|
||||
* thus not considered part of the public API of
|
||||
* MbedTLS and thus may change without notice.
|
||||
*
|
||||
* \param thread_create The thread create function implementation.
|
||||
* \param thread_join The thread join function implementation.
|
||||
|
||||
*/
|
||||
void mbedtls_test_thread_set_alt(int (*thread_create)(mbedtls_test_thread_t *thread,
|
||||
void *(*thread_func)(
|
||||
void *),
|
||||
void *thread_data),
|
||||
int (*thread_join)(mbedtls_test_thread_t *thread));
|
||||
|
||||
#else /* MBEDTLS_THREADING_ALT*/
|
||||
|
||||
typedef struct mbedtls_test_thread_t {
|
||||
|
||||
#if defined(MBEDTLS_THREADING_PTHREAD)
|
||||
pthread_t MBEDTLS_PRIVATE(thread);
|
||||
#else /* MBEDTLS_THREADING_PTHREAD */
|
||||
/* Make sure this struct is always non-empty */
|
||||
unsigned dummy;
|
||||
#endif
|
||||
|
||||
} mbedtls_test_thread_t;
|
||||
|
||||
#endif /* MBEDTLS_THREADING_ALT*/
|
||||
|
||||
/**
|
||||
* \brief The function pointers for thread create and thread
|
||||
* join.
|
||||
*
|
||||
* \note These functions are part of the testing API only
|
||||
* and thus not considered part of the public API of
|
||||
* MbedTLS and thus may change without notice.
|
||||
*
|
||||
* \note All these functions are expected to work or
|
||||
* the result will be undefined.
|
||||
*/
|
||||
extern int (*mbedtls_test_thread_create)(mbedtls_test_thread_t *thread,
|
||||
void *(*thread_func)(void *), void *thread_data);
|
||||
extern int (*mbedtls_test_thread_join)(mbedtls_test_thread_t *thread);
|
||||
|
||||
#if defined(MBEDTLS_THREADING_PTHREAD) && defined(MBEDTLS_TEST_HOOKS)
|
||||
#define MBEDTLS_TEST_MUTEX_USAGE
|
||||
#endif
|
||||
|
||||
#if defined(MBEDTLS_TEST_MUTEX_USAGE)
|
||||
/**
|
||||
* Activate the mutex usage verification framework. See threading_helpers.c for
|
||||
* information.
|
||||
*/
|
||||
void mbedtls_test_mutex_usage_init(void);
|
||||
|
||||
/**
|
||||
* Deactivate the mutex usage verification framework. See threading_helpers.c
|
||||
* for information.
|
||||
*/
|
||||
void mbedtls_test_mutex_usage_end(void);
|
||||
|
||||
/**
|
||||
* Call this function after executing a test case to check for mutex usage
|
||||
* errors.
|
||||
*/
|
||||
void mbedtls_test_mutex_usage_check(void);
|
||||
#endif /* MBEDTLS_TEST_MUTEX_USAGE */
|
||||
|
||||
#endif /* MBEDTLS_THREADING_C */
|
||||
|
||||
#endif /* THREADING_HELPERS_H */
|
|
@ -6,8 +6,74 @@
|
|||
*/
|
||||
|
||||
#include <test/helpers.h>
|
||||
#include <test/threading_helpers.h>
|
||||
#include <test/macros.h>
|
||||
|
||||
#include "mbedtls/threading.h"
|
||||
|
||||
#if defined(MBEDTLS_THREADING_C)
|
||||
|
||||
#if defined(MBEDTLS_THREADING_PTHREAD)
|
||||
|
||||
static int threading_thread_create_pthread(mbedtls_test_thread_t *thread, void *(*thread_func)(
|
||||
void *), void *thread_data)
|
||||
{
|
||||
if (thread == NULL || thread_func == NULL) {
|
||||
return MBEDTLS_ERR_THREADING_BAD_INPUT_DATA;
|
||||
}
|
||||
|
||||
if (pthread_create(&thread->thread, NULL, thread_func, thread_data)) {
|
||||
return MBEDTLS_ERR_THREADING_THREAD_ERROR;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int threading_thread_join_pthread(mbedtls_test_thread_t *thread)
|
||||
{
|
||||
if (thread == NULL) {
|
||||
return MBEDTLS_ERR_THREADING_BAD_INPUT_DATA;
|
||||
}
|
||||
|
||||
if (pthread_join(thread->thread, NULL) != 0) {
|
||||
return MBEDTLS_ERR_THREADING_THREAD_ERROR;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int (*mbedtls_test_thread_create)(mbedtls_test_thread_t *thread, void *(*thread_func)(void *),
|
||||
void *thread_data) = threading_thread_create_pthread;
|
||||
int (*mbedtls_test_thread_join)(mbedtls_test_thread_t *thread) = threading_thread_join_pthread;
|
||||
|
||||
#endif /* MBEDTLS_THREADING_PTHREAD */
|
||||
|
||||
#if defined(MBEDTLS_THREADING_ALT)
|
||||
|
||||
static int threading_thread_create_fail(mbedtls_test_thread_t *thread,
|
||||
void *(*thread_func)(void *),
|
||||
void *thread_data)
|
||||
{
|
||||
(void) thread;
|
||||
(void) thread_func;
|
||||
(void) thread_data;
|
||||
|
||||
return MBEDTLS_ERR_THREADING_BAD_INPUT_DATA;
|
||||
}
|
||||
|
||||
static int threading_thread_join_fail(mbedtls_test_thread_t *thread)
|
||||
{
|
||||
(void) thread;
|
||||
|
||||
return MBEDTLS_ERR_THREADING_BAD_INPUT_DATA;
|
||||
}
|
||||
|
||||
int (*mbedtls_test_thread_create)(mbedtls_test_thread_t *thread, void *(*thread_func)(void *),
|
||||
void *thread_data) = threading_thread_create_fail;
|
||||
int (*mbedtls_test_thread_join)(mbedtls_test_thread_t *thread) = threading_thread_join_fail;
|
||||
|
||||
#endif /* MBEDTLS_THREADING_ALT */
|
||||
|
||||
#if defined(MBEDTLS_TEST_MUTEX_USAGE)
|
||||
|
||||
#include "mbedtls/threading.h"
|
||||
|
@ -257,3 +323,5 @@ void mbedtls_test_mutex_usage_end(void)
|
|||
}
|
||||
|
||||
#endif /* MBEDTLS_TEST_MUTEX_USAGE */
|
||||
|
||||
#endif /* MBEDTLS_THREADING_C */
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#include <test/random.h>
|
||||
#include <test/bignum_helpers.h>
|
||||
#include <test/psa_crypto_helpers.h>
|
||||
#include <test/threading_helpers.h>
|
||||
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
|
|
|
@ -347,7 +347,7 @@ exit:
|
|||
void ctr_drbg_threads(data_t *expected_result, int reseed, int arg_thread_count)
|
||||
{
|
||||
size_t thread_count = (size_t) arg_thread_count;
|
||||
pthread_t *threads = NULL;
|
||||
mbedtls_test_thread_t *threads = NULL;
|
||||
|
||||
unsigned char out[16];
|
||||
unsigned char *entropy = NULL;
|
||||
|
@ -364,7 +364,7 @@ void ctr_drbg_threads(data_t *expected_result, int reseed, int arg_thread_count)
|
|||
|
||||
AES_PSA_INIT();
|
||||
|
||||
TEST_CALLOC(threads, sizeof(pthread_t) * thread_count);
|
||||
TEST_CALLOC(threads, sizeof(mbedtls_test_thread_t) * thread_count);
|
||||
memset(out, 0, sizeof(out));
|
||||
|
||||
mbedtls_ctr_drbg_context ctx;
|
||||
|
@ -398,13 +398,13 @@ void ctr_drbg_threads(data_t *expected_result, int reseed, int arg_thread_count)
|
|||
|
||||
for (size_t i = 0; i < thread_count; i++) {
|
||||
TEST_EQUAL(
|
||||
pthread_create(&threads[i], NULL,
|
||||
thread_random_function, (void *) &ctx),
|
||||
mbedtls_test_thread_create(&threads[i],
|
||||
thread_random_function, (void *) &ctx),
|
||||
0);
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < thread_count; i++) {
|
||||
TEST_EQUAL(pthread_join(threads[i], NULL), 0);
|
||||
TEST_EQUAL(mbedtls_test_thread_join(&threads[i]), 0);
|
||||
}
|
||||
|
||||
/* Take a last output for comparing and thus verifying the DRBG state */
|
||||
|
|
Loading…
Reference in a new issue