set_up_srp_verifier_file() allocates srp_callback_parm->vb via SRP_VBASE_new().
If SRP_VBASE_init() fails, vb must be freed before returning.
Additionally, add SRP_VBASE_free() to the end: cleanup path in s_server.c so
that vb is also freed on normal program exit.
Solves https://github.com/openssl/openssl/issues/30362
Fixes #30362
Signed-off-by: huanghuihui0904 <625173@qq.com>
Reviewed-by: Eugene Syromiatnikov <esyr@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.foundation>
MergeDate: Wed May 13 07:20:48 2026
(Merged from https://github.com/openssl/openssl/pull/30434)
int set_up_srp_verifier_file(SSL_CTX *ctx, srpsrvparm *srp_callback_parm,
char *srpuserseed, char *srp_verifier_file);
+void cleanup_srp(srpsrvparm *srp_callback_parm);
void lookup_srp_user(srpsrvparm *srp_callback_parm, BIO *bio_s_out);
#endif /* OPENSSL_NO_SRP */
BIO_printf(bio_err,
"Cannot initialize SRP verifier file \"%s\":ret=%d\n",
srp_verifier_file, ret);
+ SRP_VBASE_free(srp_callback_parm->vb);
+ srp_callback_parm->vb = NULL;
return 0;
}
SSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, verify_callback);
else
BIO_puts(bio_s_out, "LOOKUP not successful\n");
}
+
+void cleanup_srp(srpsrvparm *srp_callback_parm)
+{
+ SRP_user_pwd_free(srp_callback_parm->user);
+ srp_callback_parm->user = NULL;
+ SRP_VBASE_free(srp_callback_parm->vb);
+ srp_callback_parm->vb = NULL;
+}
ret = 0;
end:
SSL_CTX_free(ctx);
+#ifndef OPENSSL_NO_SRP
+ cleanup_srp(&srp_callback_parm);
+#endif
SSL_SESSION_free(psksess);
set_keylog_file(NULL, NULL);
X509_free(s_cert);