aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPiotr Nowicki <piotr.nowicki@arm.com>2020-06-08 14:08:49 +0200
committerPiotr Nowicki <piotr.nowicki@arm.com>2020-06-10 13:51:32 +0200
commitce0aab44745e63f3500215ca4bc7e69f14bdacf7 (patch)
tree2b8c1d5659496a9d79a9d3283cfa34c100b0ffa1
parent5d5841f4506f524a41e8e77e08049b24bcac0686 (diff)
downloadmbed-tls-ce0aab44745e63f3500215ca4bc7e69f14bdacf7.tar.gz
Add new error code PLATFORM_ALLOC_FAILED for mbedtls_platform_memmove()
Signed-off-by: Piotr Nowicki <piotr.nowicki@arm.com>
-rw-r--r--include/mbedtls/error.h2
-rw-r--r--include/mbedtls/nist_kw.h1
-rw-r--r--include/mbedtls/platform.h1
-rw-r--r--include/mbedtls/platform_util.h4
-rw-r--r--library/bignum.c6
-rw-r--r--library/error.c2
-rw-r--r--library/nist_kw.c12
-rw-r--r--library/pk.c12
-rw-r--r--library/platform_util.c2
9 files changed, 23 insertions, 19 deletions
diff --git a/include/mbedtls/error.h b/include/mbedtls/error.h
index a52f9f5db..9696f178b 100644
--- a/include/mbedtls/error.h
+++ b/include/mbedtls/error.h
@@ -86,7 +86,7 @@
* CHACHA20 3 0x0051-0x0055
* POLY1305 3 0x0057-0x005B
* CHACHAPOLY 2 0x0054-0x0056
- * PLATFORM 3 0x0070-0x0072 0x0071-0x0071
+ * PLATFORM 4 0x0070-0x0072 0x0071-0x0071 0x0076-0x0076
*
* High-level module nr (3 bits - 0x0...-0x7...)
* Name ID Nr of Errors
diff --git a/include/mbedtls/nist_kw.h b/include/mbedtls/nist_kw.h
index 3b67b59cd..c94c15a6f 100644
--- a/include/mbedtls/nist_kw.h
+++ b/include/mbedtls/nist_kw.h
@@ -133,6 +133,7 @@ void mbedtls_nist_kw_free( mbedtls_nist_kw_context *ctx );
*
* \return \c 0 on success.
* \return \c MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA for invalid input length.
+ * \return \c MBEDTLS_ERR_PLATFORM_ALLOC_FAILED in case of a memory allocation failure.
* \return cipher-specific error code on failure of the underlying cipher.
*/
int mbedtls_nist_kw_wrap( mbedtls_nist_kw_context *ctx, mbedtls_nist_kw_mode_t mode,
diff --git a/include/mbedtls/platform.h b/include/mbedtls/platform.h
index ec1df15cf..8a88ce712 100644
--- a/include/mbedtls/platform.h
+++ b/include/mbedtls/platform.h
@@ -42,6 +42,7 @@
#define MBEDTLS_ERR_PLATFORM_HW_ACCEL_FAILED -0x0070 /**< Hardware accelerator failed */
#define MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED -0x0072 /**< The requested feature is not supported by the platform */
#define MBEDTLS_ERR_PLATFORM_FAULT_DETECTED -0x0071 /**< A hardware fault was detected in a critical path. As a security precaution this should be treated as a potential physical attack */
+#define MBEDTLS_ERR_PLATFORM_ALLOC_FAILED -0x0076 /**< Memory allocation failed */
#if defined(MBEDTLS_PLATFORM_C)
diff --git a/include/mbedtls/platform_util.h b/include/mbedtls/platform_util.h
index d05c3c77a..4e0f9897a 100644
--- a/include/mbedtls/platform_util.h
+++ b/include/mbedtls/platform_util.h
@@ -209,8 +209,8 @@ void *mbedtls_platform_memcpy( void *dst, const void *src, size_t num );
* \param src Source buffer where the data is being moved from.
* \param num The length of the buffers in bytes.
*
- * \return 0 if the operation was successful or -1 if memory allocation
- * failed.
+ * \return 0 if the operation was successful
+ * \return #MBEDTLS_ERR_PLATFORM_ALLOC_FAILED if a memory allocation failed
*/
int mbedtls_platform_memmove( void *dst, const void *src, size_t num );
diff --git a/library/bignum.c b/library/bignum.c
index 2cc8e224c..f4ab0db63 100644
--- a/library/bignum.c
+++ b/library/bignum.c
@@ -558,11 +558,7 @@ static int mpi_write_hlp( mbedtls_mpi *X, int radix,
length++;
} while( mbedtls_mpi_cmp_int( X, 0 ) != 0 );
- if( 0 != mbedtls_platform_memmove( *p, p_end, length ) )
- {
- ret = MBEDTLS_ERR_MPI_ALLOC_FAILED;
- goto cleanup;
- }
+ MBEDTLS_MPI_CHK( mbedtls_platform_memmove( *p, p_end, length ) );
*p += length;
cleanup:
diff --git a/library/error.c b/library/error.c
index ecdec785b..893de7f5e 100644
--- a/library/error.c
+++ b/library/error.c
@@ -843,6 +843,8 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen )
mbedtls_snprintf( buf, buflen, "PLATFORM - The requested feature is not supported by the platform" );
if( use_ret == -(MBEDTLS_ERR_PLATFORM_FAULT_DETECTED) )
mbedtls_snprintf( buf, buflen, "PLATFORM - A hardware fault was detected in a critical path. As a security precaution this should be treated as a potential physical attack" );
+ if( use_ret == -(MBEDTLS_ERR_PLATFORM_ALLOC_FAILED) )
+ mbedtls_snprintf( buf, buflen, "PLATFORM - Memory allocation failed" );
#endif /* MBEDTLS_PLATFORM_C */
#if defined(MBEDTLS_POLY1305_C)
diff --git a/library/nist_kw.c b/library/nist_kw.c
index 5b5aa1caf..2f7f082c1 100644
--- a/library/nist_kw.c
+++ b/library/nist_kw.c
@@ -222,9 +222,10 @@ int mbedtls_nist_kw_wrap( mbedtls_nist_kw_context *ctx,
}
mbedtls_platform_memcpy( output, NIST_KW_ICV1, KW_SEMIBLOCK_LENGTH );
- if( 0 != mbedtls_platform_memmove( output + KW_SEMIBLOCK_LENGTH, input, in_len ) )
+ ret = mbedtls_platform_memmove( output + KW_SEMIBLOCK_LENGTH, input, in_len );
+ if( ret != 0 )
{
- return MBEDTLS_ERR_CIPHER_ALLOC_FAILED;
+ return ret;
}
}
else
@@ -346,10 +347,11 @@ static int unwrap( mbedtls_nist_kw_context *ctx,
}
mbedtls_platform_memcpy( A, input, KW_SEMIBLOCK_LENGTH );
- if( 0 != mbedtls_platform_memmove( output, input + KW_SEMIBLOCK_LENGTH,
- ( semiblocks - 1 ) * KW_SEMIBLOCK_LENGTH ) )
+ ret = mbedtls_platform_memmove( output, input + KW_SEMIBLOCK_LENGTH,
+ ( semiblocks - 1 ) * KW_SEMIBLOCK_LENGTH );
+ if( ret != 0 )
{
- return( MBEDTLS_ERR_CIPHER_ALLOC_FAILED );
+ return ret;
}
/* Calculate intermediate values */
diff --git a/library/pk.c b/library/pk.c
index f2df7db05..cf4cfbbaa 100644
--- a/library/pk.c
+++ b/library/pk.c
@@ -623,15 +623,17 @@ static int asn1_write_mpibuf( unsigned char **p, unsigned char *start,
size_t n_len )
{
size_t len = 0;
+ int ret = MBEDTLS_ERR_PLATFORM_FAULT_DETECTED;
if( (size_t)( *p - start ) < n_len )
return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL );
len = n_len;
*p -= len;
- if( 0 != mbedtls_platform_memmove( *p, start, len ) )
+ ret = mbedtls_platform_memmove( *p, start, len );
+ if( ret != 0 )
{
- return( MBEDTLS_ERR_PK_ALLOC_FAILED );
+ return( ret );
}
/* ASN.1 DER encoding requires minimal length, so skip leading 0s.
@@ -694,11 +696,11 @@ static int pk_ecdsa_sig_asn1_from_uecc( unsigned char *sig, size_t *sig_len,
*--p = MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE;
len += 2;
- if( 0 != mbedtls_platform_memmove( sig, p, len ) )
+ ret = mbedtls_platform_memmove( sig, p, len );
+ if( ret != 0 )
{
- return( MBEDTLS_ERR_PK_ALLOC_FAILED );
+ return( ret );
}
- ret = 0;
*sig_len = len;
return( ret );
diff --git a/library/platform_util.c b/library/platform_util.c
index 694e23a6a..17913b4d7 100644
--- a/library/platform_util.c
+++ b/library/platform_util.c
@@ -141,7 +141,7 @@ int mbedtls_platform_memmove( void *dst, const void *src, size_t num )
return 0;
}
- return -1;
+ return MBEDTLS_ERR_PLATFORM_ALLOC_FAILED;
}
int mbedtls_platform_memcmp( const void *buf1, const void *buf2, size_t num )