]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: ssl: potential memory leaks using ssl_c_key_alg or ssl_c_sig_alg.
authorEmeric Brun <ebrun@exceliance.fr>
Mon, 7 Oct 2013 12:31:44 +0000 (14:31 +0200)
committerWilly Tarreau <w@1wt.eu>
Thu, 10 Oct 2013 09:33:14 +0000 (11:33 +0200)
The leak occurs in an error case which practically never happens.

src/ssl_sock.c

index 105aa1d3bb80bb84508eef706f57b8a6d5dbda59..e79190a9dc3606414a66304414be49d125ce1eaa 100644 (file)
@@ -2027,8 +2027,10 @@ smp_fetch_ssl_c_sig_alg(struct proxy *px, struct session *l4, void *l7, unsigned
        nid = OBJ_obj2nid((ASN1_OBJECT *)(crt->cert_info->signature->algorithm));
 
        smp->data.str.str = (char *)OBJ_nid2sn(nid);
-       if (!smp->data.str.str)
+       if (!smp->data.str.str) {
+               X509_free(crt);
                return 0;
+       }
 
        smp->type = SMP_T_CSTR;
        smp->data.str.len = strlen(smp->data.str.str);
@@ -2061,8 +2063,10 @@ smp_fetch_ssl_c_key_alg(struct proxy *px, struct session *l4, void *l7, unsigned
        nid = OBJ_obj2nid((ASN1_OBJECT *)(crt->cert_info->key->algor->algorithm));
 
        smp->data.str.str = (char *)OBJ_nid2sn(nid);
-       if (!smp->data.str.str)
+       if (!smp->data.str.str) {
+               X509_free(crt);
                return 0;
+       }
 
        smp->type = SMP_T_CSTR;
        smp->data.str.len = strlen(smp->data.str.str);