Skip to content

Commit 3206637

Browse files
Merge pull request #7695 from dgarske/compat_realloc
Fixes for building the compatibility layer with no realloc
2 parents bbf3bb4 + 2fd7a2e commit 3206637

File tree

3 files changed

+102
-18
lines changed

3 files changed

+102
-18
lines changed

wolfcrypt/benchmark/benchmark.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14182,10 +14182,13 @@ void bench_sphincsKeySign(byte level, byte optim)
1418214182
* Use care when repeatedly calling calling. See implementation. */
1418314183
double current_time(int reset)
1418414184
{
14185-
portTickType tickCount;
14186-
/* tick count == ms, if configTICK_RATE_HZ is set to 1000 */
14187-
tickCount = xTaskGetTickCount();
14185+
portTickType tickCount = xTaskGetTickCount();
14186+
/* if configTICK_RATE_HZ is available use if (default is 1000) */
14187+
#ifdef configTICK_RATE_HZ
14188+
return (double)tickCount / configTICK_RATE_HZ;
14189+
#else
1418814190
return (double)tickCount / 1000;
14191+
#endif
1418914192
}
1419014193
#endif
1419114194

wolfcrypt/src/evp.c

Lines changed: 88 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -711,8 +711,19 @@ static int evpCipherBlock(WOLFSSL_EVP_CIPHER_CTX *ctx,
711711
static int wolfSSL_EVP_CipherUpdate_GCM_AAD(WOLFSSL_EVP_CIPHER_CTX *ctx,
712712
const unsigned char *in, int inl) {
713713
if (in && inl > 0) {
714-
byte* tmp = (byte*)XREALLOC(ctx->authIn,
714+
byte* tmp;
715+
#ifdef WOLFSSL_NO_REALLOC
716+
tmp = (byte*)XMALLOC((size_t)(ctx->authInSz + inl), NULL,
717+
DYNAMIC_TYPE_OPENSSL);
718+
if (tmp != NULL) {
719+
XMEMCPY(tmp, ctx->authIn, (size_t)ctx->authInSz);
720+
XFREE(ctx->authIn, NULL, DYNAMIC_TYPE_OPENSSL);
721+
ctx->authIn = NULL;
722+
}
723+
#else
724+
tmp = (byte*)XREALLOC(ctx->authIn,
715725
(size_t)(ctx->authInSz + inl), NULL, DYNAMIC_TYPE_OPENSSL);
726+
#endif
716727
if (tmp) {
717728
ctx->authIn = tmp;
718729
XMEMCPY(ctx->authIn + ctx->authInSz, in, (size_t)inl);
@@ -745,9 +756,19 @@ static int wolfSSL_EVP_CipherUpdate_GCM(WOLFSSL_EVP_CIPHER_CTX *ctx,
745756
/* Buffer input for one-shot API */
746757
if (inl > 0) {
747758
byte* tmp;
759+
#ifdef WOLFSSL_NO_REALLOC
760+
tmp = (byte*)XMALLOC((size_t)(ctx->authBufferLen + inl), NULL,
761+
DYNAMIC_TYPE_OPENSSL);
762+
if (tmp != NULL) {
763+
XMEMCPY(tmp, ctx->authBuffer, (size_t)ctx->authBufferLen);
764+
XFREE(ctx->authBuffer, NULL, DYNAMIC_TYPE_OPENSSL);
765+
ctx->authBuffer = NULL;
766+
}
767+
#else
748768
tmp = (byte*)XREALLOC(ctx->authBuffer,
749769
(size_t)(ctx->authBufferLen + inl), NULL,
750770
DYNAMIC_TYPE_OPENSSL);
771+
#endif
751772
if (tmp) {
752773
XMEMCPY(tmp + ctx->authBufferLen, in, (size_t)inl);
753774
ctx->authBufferLen += inl;
@@ -817,8 +838,19 @@ static int wolfSSL_EVP_CipherUpdate_GCM(WOLFSSL_EVP_CIPHER_CTX *ctx,
817838
static int wolfSSL_EVP_CipherUpdate_CCM_AAD(WOLFSSL_EVP_CIPHER_CTX *ctx,
818839
const unsigned char *in, int inl) {
819840
if (in && inl > 0) {
820-
byte* tmp = (byte*)XREALLOC(ctx->authIn,
841+
byte* tmp;
842+
#ifdef WOLFSSL_NO_REALLOC
843+
tmp = (byte*)XMALLOC((size_t)(ctx->authInSz + inl), NULL,
844+
DYNAMIC_TYPE_OPENSSL);
845+
if (tmp != NULL) {
846+
XMEMCPY(tmp, ctx->authIn, (size_t)ctx->authInSz);
847+
XFREE(ctx->authIn, NULL, DYNAMIC_TYPE_OPENSSL);
848+
ctx->authIn = NULL;
849+
}
850+
#else
851+
tmp = (byte*)XREALLOC(ctx->authIn,
821852
(size_t)(ctx->authInSz + inl), NULL, DYNAMIC_TYPE_OPENSSL);
853+
#endif
822854
if (tmp) {
823855
ctx->authIn = tmp;
824856
XMEMCPY(ctx->authIn + ctx->authInSz, in, (size_t)inl);
@@ -843,9 +875,19 @@ static int wolfSSL_EVP_CipherUpdate_CCM(WOLFSSL_EVP_CIPHER_CTX *ctx,
843875
/* Buffer input for one-shot API */
844876
if (inl > 0) {
845877
byte* tmp;
878+
#ifdef WOLFSSL_NO_REALLOC
879+
tmp = (byte*)XMALLOC((size_t)(ctx->authBufferLen + inl), NULL,
880+
DYNAMIC_TYPE_OPENSSL);
881+
if (tmp != NULL) {
882+
XMEMCPY(tmp, ctx->authBuffer, (size_t)ctx->authBufferLen);
883+
XFREE(ctx->authBuffer, NULL, DYNAMIC_TYPE_OPENSSL);
884+
ctx->authBuffer = NULL;
885+
}
886+
#else
846887
tmp = (byte*)XREALLOC(ctx->authBuffer,
847888
(size_t)(ctx->authBufferLen + inl), NULL,
848889
DYNAMIC_TYPE_OPENSSL);
890+
#endif
849891
if (tmp) {
850892
XMEMCPY(tmp + ctx->authBufferLen, in, (size_t)inl);
851893
ctx->authBufferLen += inl;
@@ -875,8 +917,19 @@ static int wolfSSL_EVP_CipherUpdate_AriaGCM_AAD(WOLFSSL_EVP_CIPHER_CTX *ctx,
875917
const unsigned char *in, int inl)
876918
{
877919
if (in && inl > 0) {
878-
byte* tmp = (byte*)XREALLOC(ctx->authIn,
920+
byte* tmp;
921+
#ifdef WOLFSSL_NO_REALLOC
922+
tmp = (byte*)XMALLOC((size_t)ctx->authInSz + inl, NULL,
923+
DYNAMIC_TYPE_OPENSSL);
924+
if (tmp != NULL) {
925+
XMEMCPY(tmp, ctx->authIn, (size_t)ctx->authInSz);
926+
XFREE(ctx->authIn, NULL, DYNAMIC_TYPE_OPENSSL);
927+
ctx->authIn = NULL;
928+
}
929+
#else
930+
tmp = (byte*)XREALLOC(ctx->authIn,
879931
(size_t)ctx->authInSz + inl, NULL, DYNAMIC_TYPE_OPENSSL);
932+
#endif
880933
if (tmp) {
881934
ctx->authIn = tmp;
882935
XMEMCPY(ctx->authIn + ctx->authInSz, in, (size_t)inl);
@@ -905,9 +958,18 @@ static int wolfSSL_EVP_CipherUpdate_AriaGCM(WOLFSSL_EVP_CIPHER_CTX *ctx,
905958
if (ctx->enc == 0) { /* Append extra space for the tag */
906959
size = WC_ARIA_GCM_GET_CIPHERTEXT_SIZE(size);
907960
}
908-
tmp = (byte*)XREALLOC(ctx->authBuffer,
909-
(size_t)size, NULL,
910-
DYNAMIC_TYPE_OPENSSL);
961+
#ifdef WOLFSSL_NO_REALLOC
962+
tmp = (byte*)XMALLOC((size_t)size, NULL,
963+
DYNAMIC_TYPE_OPENSSL);
964+
if (tmp != NULL) {
965+
XMEMCPY(tmp, ctx->authBuffer, (size_t)ctx->authBufferLen);
966+
XFREE(ctx->authBuffer, NULL, DYNAMIC_TYPE_OPENSSL);
967+
ctx->authBuffer = NULL;
968+
}
969+
#else
970+
tmp = (byte*)XREALLOC(ctx->authBuffer, (size_t)size, NULL,
971+
DYNAMIC_TYPE_OPENSSL);
972+
#endif
911973
if (tmp) {
912974
XMEMCPY(tmp + ctx->authBufferLen, in, (size_t)inl);
913975
ctx->authBufferLen += inl;
@@ -2693,9 +2755,19 @@ int wolfSSL_EVP_PKEY_CTX_add1_hkdf_info(WOLFSSL_EVP_PKEY_CTX* ctx,
26932755
if (ret == WOLFSSL_SUCCESS && info != NULL && infoSz > 0) {
26942756
unsigned char* p;
26952757
/* If there's already info in the buffer, append. */
2758+
#ifdef WOLFSSL_NO_REALLOC
2759+
p = (byte*)XMALLOC((size_t)(ctx->pkey->hkdfInfoSz + (word32)infoSz), NULL,
2760+
DYNAMIC_TYPE_INFO);
2761+
if (p != NULL) {
2762+
XMEMCPY(p, ctx->pkey->hkdfInfo, (size_t)ctx->pkey->hkdfInfoSz);
2763+
XFREE(ctx->pkey->hkdfInfo, NULL, DYNAMIC_TYPE_INFO);
2764+
ctx->pkey->hkdfInfo = NULL;
2765+
}
2766+
#else
26962767
p = (byte*)XREALLOC(ctx->pkey->hkdfInfo,
26972768
(size_t)(ctx->pkey->hkdfInfoSz + (word32)infoSz), NULL,
26982769
DYNAMIC_TYPE_INFO);
2770+
#endif
26992771
if (p == NULL) {
27002772
WOLFSSL_MSG("Failed to reallocate larger HKDF info buffer.");
27012773
ret = WOLFSSL_FAILURE;
@@ -9128,8 +9200,17 @@ static int ECC_populate_EVP_PKEY(EVP_PKEY* pkey, WOLFSSL_EC_KEY *key)
91289200
}
91299201
else if (ecc->type == ECC_PUBLICKEY) {
91309202
if ((derSz = wc_EccPublicKeyDerSize(ecc, 1)) > 0) {
9131-
derBuf = (byte*)XREALLOC(pkey->pkey.ptr, (size_t)derSz, NULL,
9203+
#ifdef WOLFSSL_NO_REALLOC
9204+
derBuf = (byte*)XMALLOC((size_t)derSz, pkey->heap, DYNAMIC_TYPE_OPENSSL);
9205+
if (derBuf != NULL) {
9206+
XMEMCPY(derBuf, pkey->pkey.ptr, (size_t)pkey->pkey_sz);
9207+
XFREE(pkey->pkey.ptr, pkey->heap, DYNAMIC_TYPE_OPENSSL);
9208+
pkey->pkey.ptr = NULL;
9209+
}
9210+
#else
9211+
derBuf = (byte*)XREALLOC(pkey->pkey.ptr, (size_t)derSz, pkey->heap,
91329212
DYNAMIC_TYPE_OPENSSL);
9213+
#endif
91339214
if (derBuf != NULL) {
91349215
pkey->pkey.ptr = (char*)derBuf;
91359216
if ((derSz = wc_EccPublicKeyToDer(ecc, derBuf, (word32)derSz,

wolfcrypt/test/test.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17917,9 +17917,9 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t memory_test(void)
1791717917
#endif
1791817918
if (b)
1791917919
XFREE(b, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
17920-
if ((b == NULL)
17920+
if (b == NULL
1792117921
#ifndef WOLFSSL_NO_REALLOC
17922-
|| (c == NULL)
17922+
|| c == NULL
1792317923
#endif
1792417924
) {
1792517925
return WC_TEST_RET_ENC_ERRNO;
@@ -53600,8 +53600,8 @@ static void *my_Realloc_cb(void *ptr, size_t size)
5360053600
WOLFSSL_TEST_SUBROUTINE wc_test_ret_t memcb_test(void)
5360153601
{
5360253602
wc_test_ret_t ret = 0;
53603-
#if !defined(WOLFSSL_NO_MALLOC) && !defined(WOLFSSL_LINUXKM) && \
53604-
!defined(WOLFSSL_STATIC_MEMORY)
53603+
#if !defined(WOLFSSL_NO_MALLOC) && !defined(WOLFSSL_NO_REALLOC) && \
53604+
!defined(WOLFSSL_LINUXKM) && !defined(WOLFSSL_STATIC_MEMORY)
5360553605
byte* b = NULL;
5360653606
#endif
5360753607
wolfSSL_Malloc_cb mc;
@@ -53614,8 +53614,8 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t memcb_test(void)
5361453614
if (ret != 0)
5361553615
return WC_TEST_RET_ENC_EC(ret);
5361653616

53617-
#if !defined(WOLFSSL_NO_MALLOC) && !defined(WOLFSSL_LINUXKM) && \
53618-
!defined(WOLFSSL_STATIC_MEMORY)
53617+
#if !defined(WOLFSSL_NO_MALLOC) && !defined(WOLFSSL_NO_REALLOC) && \
53618+
!defined(WOLFSSL_LINUXKM) && !defined(WOLFSSL_STATIC_MEMORY)
5361953619

5362053620
/* test realloc */
5362153621
b = (byte*)XREALLOC(b, 1024, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
@@ -53650,8 +53650,8 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t memcb_test(void)
5365053650
ret = WC_TEST_RET_ENC_NC;
5365153651
#endif /* !WOLFSSL_NO_MALLOC */
5365253652

53653-
#if !defined(WOLFSSL_NO_MALLOC) && !defined(WOLFSSL_LINUXKM) && \
53654-
!defined(WOLFSSL_STATIC_MEMORY)
53653+
#if !defined(WOLFSSL_NO_MALLOC) && !defined(WOLFSSL_NO_REALLOC) && \
53654+
!defined(WOLFSSL_LINUXKM) && !defined(WOLFSSL_STATIC_MEMORY)
5365553655
exit_memcb:
5365653656

5365753657
/* reset malloc/free/realloc counts */

0 commit comments

Comments
 (0)