]> granicus.if.org Git - curl/commitdiff
mbedtls: release sessionid resources on error
authorDaniel Gustafsson <daniel@yesql.se>
Sat, 16 Feb 2019 21:30:31 +0000 (22:30 +0100)
committerDaniel Gustafsson <daniel@yesql.se>
Sat, 16 Feb 2019 21:30:31 +0000 (22:30 +0100)
If mbedtls_ssl_get_session() fails, it may still have allocated
memory that needs to be freed to avoid leaking. Call the library
API function to release session resources on this errorpath as
well as on Curl_ssl_addsessionid() errors.

Closes: #3574
Reported-by: MichaƂ Antoniak <M.Antoniak@posnet.com>
Reviewed-by: Daniel Stenberg <daniel@haxx.se>
lib/vtls/mbedtls.c

index c36c93e3fa4bcd77013fba3d2cfd1c1e0599711b..27a9402cbc1bff6c55663be81821d28353bf41f3 100644 (file)
@@ -716,6 +716,8 @@ mbed_connect_step3(struct connectdata *conn,
 
     ret = mbedtls_ssl_get_session(&BACKEND->ssl, our_ssl_sessionid);
     if(ret) {
+      if(ret != MBEDTLS_ERR_SSL_ALLOC_FAILED)
+        mbedtls_ssl_session_free(our_ssl_sessionid);
       free(our_ssl_sessionid);
       failf(data, "mbedtls_ssl_get_session returned -0x%x", -ret);
       return CURLE_SSL_CONNECT_ERROR;
@@ -729,6 +731,7 @@ mbed_connect_step3(struct connectdata *conn,
     retcode = Curl_ssl_addsessionid(conn, our_ssl_sessionid, 0, sockindex);
     Curl_ssl_sessionid_unlock(conn);
     if(retcode) {
+      mbedtls_ssl_session_free(our_ssl_sessionid);
       free(our_ssl_sessionid);
       failf(data, "failed to store ssl session");
       return retcode;