Checking in critical places if secured memset() and memcpy() was successful

Signed-off-by: Piotr Nowicki <piotr.nowicki@arm.com>
diff --git a/library/rsa.c b/library/rsa.c
index 67ebf84..83a4f38 100644
--- a/library/rsa.c
+++ b/library/rsa.c
@@ -60,9 +60,9 @@
 #include <stdlib.h>
 #endif
 
-#if defined(MBEDTLS_PLATFORM_C)
 #include "mbedtls/platform.h"
-#else
+
+#if !defined(MBEDTLS_PLATFORM_C)
 #include <stdio.h>
 #define mbedtls_printf printf
 #define mbedtls_calloc calloc
@@ -1974,8 +1974,11 @@
     /* Are we signing raw data? */
     if( md_alg == MBEDTLS_MD_NONE )
     {
-        mbedtls_platform_memcpy( p, hash, hashlen );
-        return( 0 );
+        if( mbedtls_platform_memcpy( p, hash, hashlen ) == p )
+        {
+            return( 0 );
+        }
+        return( MBEDTLS_ERR_PLATFORM_FAULT_DETECTED );
     }
 
     /* Signing hashed data, add corresponding ASN.1 structure
@@ -2003,7 +2006,10 @@
     *p++ = 0x00;
     *p++ = MBEDTLS_ASN1_OCTET_STRING;
     *p++ = (unsigned char) hashlen;
-    mbedtls_platform_memcpy( p, hash, hashlen );
+    if( mbedtls_platform_memcpy( p, hash, hashlen ) != p )
+    {
+        return( MBEDTLS_ERR_PLATFORM_FAULT_DETECTED );
+    }
     p += hashlen;
 
     /* Just a sanity-check, should be automatic
@@ -2029,7 +2035,7 @@
                                const unsigned char *hash,
                                unsigned char *sig )
 {
-    int ret;
+    int ret = MBEDTLS_ERR_PLATFORM_FAULT_DETECTED;
     unsigned char *sig_try = NULL, *verif = NULL;
 
     RSA_VALIDATE_RET( ctx != NULL );
@@ -2087,7 +2093,10 @@
         goto cleanup;
     }
 
-    mbedtls_platform_memcpy( sig, sig_try, ctx->len );
+    if( mbedtls_platform_memcpy( sig, sig_try, ctx->len ) != sig )
+    {
+        ret = MBEDTLS_ERR_PLATFORM_FAULT_DETECTED;
+    }
 
 cleanup:
     mbedtls_free( sig_try );