From 14d4d8872730de6d51d8777fbd2d0081fe923483 Mon Sep 17 00:00:00 2001 From: Yakun Xu Date: Thu, 14 Feb 2019 00:58:41 +0800 Subject: [PATCH] [mbedtls] guard allocator with accurate macro (#3575) This commit guards using mbedTLS's buffer allocator API with a more accurate macro, so that even in single instance mode, we can use other memory allocator. --- configure.ac | 8 ++++++++ src/core/common/instance.hpp | 4 +++- src/core/crypto/mbedtls.cpp | 8 ++++++-- src/core/meshcop/dtls.cpp | 5 ----- src/core/openthread-core-default-config.h | 13 +++++++++++++ 5 files changed, 30 insertions(+), 8 deletions(-) diff --git a/configure.ac b/configure.ac index 619bc189f..5b1ca4ba3 100644 --- a/configure.ac +++ b/configure.ac @@ -434,8 +434,16 @@ if test "$enable_builtin_mbedtls" = "yes" -a ! "${MBEDTLS_CPPFLAGS}"; then MBEDTLS_CPPFLAGS="${MBEDTLS_CPPFLAGS} -I\${abs_top_srcdir}/third_party/mbedtls/repo/include" MBEDTLS_CPPFLAGS="${MBEDTLS_CPPFLAGS} -DMBEDTLS_CONFIG_FILE=\\\"mbedtls-config.h\\\"" fi + +if test "$enable_builtin_mbedtls" = "yes"; then + OPENTHREAD_CONFIG_ENABLE_BUILTIN_MBEDTLS=1 +else + OPENTHREAD_CONFIG_ENABLE_BUILTIN_MBEDTLS=0 +fi + AC_MSG_CHECKING([whether mbed TLS should be enabled]) AC_MSG_RESULT(${enable_builtin_mbedtls}) +AC_DEFINE_UNQUOTED([OPENTHREAD_CONFIG_ENABLE_BUILTIN_MBEDTLS], [${OPENTHREAD_CONFIG_ENABLE_BUILTIN_MBEDTLS}], [Define to 1 if you want to enable support for bultin-mbedtls.]) AM_CONDITIONAL([OPENTHREAD_ENABLE_BUILTIN_MBEDTLS], [test "${enable_builtin_mbedtls}" = "yes"]) # diff --git a/src/core/common/instance.hpp b/src/core/common/instance.hpp index 4304ebc0e..8b9352716 100644 --- a/src/core/common/instance.hpp +++ b/src/core/common/instance.hpp @@ -431,8 +431,10 @@ private: Settings mSettings; #if !OPENTHREAD_ENABLE_MULTIPLE_INSTANCES +#if OPENTHREAD_CONFIG_ENABLE_BUILTIN_MBEDTLS Crypto::MbedTls mMbedTls; - Utils::Heap mHeap; +#endif + Utils::Heap mHeap; #endif Ip6::Ip6 mIp6; diff --git a/src/core/crypto/mbedtls.cpp b/src/core/crypto/mbedtls.cpp index c94ba39c2..ab61ee354 100644 --- a/src/core/crypto/mbedtls.cpp +++ b/src/core/crypto/mbedtls.cpp @@ -37,7 +37,7 @@ #include "common/instance.hpp" -#if !OPENTHREAD_ENABLE_MULTIPLE_INSTANCES +#if !OPENTHREAD_ENABLE_MULTIPLE_INSTANCES && OPENTHREAD_CONFIG_ENABLE_BUILTIN_MBEDTLS namespace ot { namespace Crypto { @@ -54,10 +54,14 @@ static void Free(void *aPointer) MbedTls::MbedTls(void) { +#ifdef MBEDTLS_DEBUG_C + // mbedTLS's debug level is almost the same as OpenThread's + mbedtls_debug_set_threshold(OPENTHREAD_CONFIG_LOG_LEVEL); +#endif mbedtls_platform_set_calloc_free(CAlloc, Free); } } // namespace Crypto } // namespace ot -#endif // #if !OPENTHREAD_ENABLE_MULTIPLE_INSTANCES +#endif // !OPENTHREAD_ENABLE_MULTIPLE_INSTANCES && OPENTHREAD_CONFIG_ENABLE_BUILTIN_MBEDTLS diff --git a/src/core/meshcop/dtls.cpp b/src/core/meshcop/dtls.cpp index 64c24384f..e3eab7dc4 100644 --- a/src/core/meshcop/dtls.cpp +++ b/src/core/meshcop/dtls.cpp @@ -176,11 +176,6 @@ otError Dtls::Start(bool aClient, MBEDTLS_ENTROPY_SOURCE_STRONG); VerifyOrExit(rval == 0); -#ifdef MBEDTLS_DEBUG_C - // mbedTLS's debug level is almost the same as OpenThread's - mbedtls_debug_set_threshold(OPENTHREAD_CONFIG_LOG_LEVEL); -#endif - { otExtAddress eui64; otPlatRadioGetIeeeEui64(&GetInstance(), eui64.m8); diff --git a/src/core/openthread-core-default-config.h b/src/core/openthread-core-default-config.h index 95de5f217..3486213e3 100644 --- a/src/core/openthread-core-default-config.h +++ b/src/core/openthread-core-default-config.h @@ -679,6 +679,19 @@ #define OPENTHREAD_CONFIG_LOG_LEVEL OT_LOG_LEVEL_CRIT #endif +/** + * @def OPENTHREAD_CONFIG_ENABLE_BUILTIN_MBEDTLS + * + * Define as 1 to enable bultin-mbedtls. + * + * Note that the OPENTHREAD_CONFIG_ENABLE_BUILTIN_MBEDTLS determines whether to use bultin-mbedtls as well as + * whether to manage mbedTLS internally, such as memory allocation and debug. + * + */ +#ifndef OPENTHREAD_CONFIG_ENABLE_BUILTIN_MBEDTLS +#define OPENTHREAD_CONFIG_ENABLE_BUILTIN_MBEDTLS 1 +#endif + /** * @def OPENTHREAD_CONFIG_ENABLE_DYNAMIC_LOG_LEVEL *