From 7d3f3a8ac80adefa6c70ef76a47273735dcc4d71 Mon Sep 17 00:00:00 2001
From: Simon Butcher <simon.butcher@arm.com>
Date: Sat, 2 Jan 2016 00:03:39 +0000
Subject: [PATCH] Fix for memory leak in RSA-SSA signing

Fix in mbedtls_rsa_rsassa_pkcs1_v15_sign() in rsa.c. Resolves github issue #372
---
 ChangeLog     |  2 ++
 library/rsa.c | 10 ++++++++--
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index f306742d8..2a8189436 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -7,6 +7,8 @@ Bugfix
    * Fix bug in certificate validation that caused valid chains to be rejected
      when the first intermediate certificate has pathLenConstraint=0. Found by
      Nicholas Wilson. Introduced in mbed TLS 1.3.15. #280
+   * Removed potential leak in mbedtls_rsa_rsassa_pkcs1_v15_sign(), found by
+     JayaraghavendranK. #372
 
 = mbed TLS 1.3.15 released 2015-11-04
 
diff --git a/library/rsa.c b/library/rsa.c
index 59ec35f9c..0cb0e7d8d 100644
--- a/library/rsa.c
+++ b/library/rsa.c
@@ -1082,10 +1082,16 @@ int rsa_rsassa_pkcs1_v15_sign( rsa_context *ctx,
      * temporary buffer and check it before returning it.
      */
     sig_try = polarssl_malloc( ctx->len );
-    verif   = polarssl_malloc( ctx->len );
-    if( sig_try == NULL || verif == NULL )
+    if( sig_try == NULL )
         return( POLARSSL_ERR_MPI_MALLOC_FAILED );
 
+    verif   = polarssl_malloc( ctx->len );
+    if( verif == NULL )
+    {
+        polarssl_free( sig_try );
+        return( POLARSSL_ERR_MPI_MALLOC_FAILED );
+    }
+
     MPI_CHK( rsa_private( ctx, f_rng, p_rng, sig, sig_try ) );
     MPI_CHK( rsa_public( ctx, sig_try, verif ) );