diff --git a/include/mbedtls/error.h b/include/mbedtls/error.h
index a52f9f5..9696f17 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 3b67b59..c94c15a 100644
--- a/include/mbedtls/nist_kw.h
+++ b/include/mbedtls/nist_kw.h
@@ -133,6 +133,7 @@
  *
  * \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 ec1df15..8a88ce7 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 d05c3c7..4e0f989 100644
--- a/include/mbedtls/platform_util.h
+++ b/include/mbedtls/platform_util.h
@@ -209,8 +209,8 @@
  * \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 2cc8e22..f4ab0db 100644
--- a/library/bignum.c
+++ b/library/bignum.c
@@ -558,11 +558,7 @@
         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 ecdec78..893de7f 100644
--- a/library/error.c
+++ b/library/error.c
@@ -843,6 +843,8 @@
         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 5b5aa1c..2f7f082 100644
--- a/library/nist_kw.c
+++ b/library/nist_kw.c
@@ -222,9 +222,10 @@
         }
 
         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 @@
     }
 
     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 f2df7db..cf4cfbb 100644
--- a/library/pk.c
+++ b/library/pk.c
@@ -623,15 +623,17 @@
                               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 @@
     *--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 694e23a..17913b4 100644
--- a/library/platform_util.c
+++ b/library/platform_util.c
@@ -141,7 +141,7 @@
         return 0;
     }
 
-    return -1;
+    return MBEDTLS_ERR_PLATFORM_ALLOC_FAILED;
 }
 
 int mbedtls_platform_memcmp( const void *buf1, const void *buf2, size_t num )
