]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
Fix potential double free through SRP_user_pwd_set1_ids()
authorNiels Dossche <7771979+nielsdos@users.noreply.github.com>
Wed, 9 Oct 2024 21:00:13 +0000 (23:00 +0200)
committerTomas Mraz <tomas@openssl.org>
Fri, 11 Oct 2024 12:22:36 +0000 (14:22 +0200)
If SRP_user_pwd_set1_ids() fails during one of the duplications, or id
is NULL, then the old pointer values are still stored but they are now dangling.
Later when SRP_user_pwd_free() is called these are freed again,
leading to a double free.

Although there are no such uses in OpenSSL as far as I found,
it's still a public API.

CLA: trivial

Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/25655)

crypto/srp/srp_vfy.c

index 6e68d7a1114ae18524395bf0c4fa45cb4599a83c..5f626d70555cab94d90fa60fc95fa74128867f69 100644 (file)
@@ -214,6 +214,8 @@ int SRP_user_pwd_set1_ids(SRP_user_pwd *vinfo, const char *id,
 {
     OPENSSL_free(vinfo->id);
     OPENSSL_free(vinfo->info);
+    vinfo->id = NULL;
+    vinfo->info = NULL;
     if (id != NULL && NULL == (vinfo->id = OPENSSL_strdup(id)))
         return 0;
     return (info == NULL || NULL != (vinfo->info = OPENSSL_strdup(info)));