Fix memory leaks from missing checks of return value from sk_OPENSSL_STRING_push()

Reviewed-by: Saša Nedvědický <sashan@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/26238)

(cherry picked from commit d48874ab47)
This commit is contained in:
Frederik Wedel-Heinen 2024-12-21 21:15:36 +01:00 committed by Tomas Mraz
parent 26150c1716
commit cdc1a180b1
5 changed files with 38 additions and 19 deletions

View File

@ -127,7 +127,8 @@ int asn1parse_main(int argc, char **argv)
dump = strtol(opt_arg(), NULL, 0); dump = strtol(opt_arg(), NULL, 0);
break; break;
case OPT_STRPARSE: case OPT_STRPARSE:
sk_OPENSSL_STRING_push(osk, opt_arg()); if (sk_OPENSSL_STRING_push(osk, opt_arg()) <= 0)
goto end;
break; break;
case OPT_GENSTR: case OPT_GENSTR:
genstr = opt_arg(); genstr = opt_arg();

View File

@ -502,13 +502,15 @@ int cms_main(int argc, char **argv)
if (rr_from == NULL if (rr_from == NULL
&& (rr_from = sk_OPENSSL_STRING_new_null()) == NULL) && (rr_from = sk_OPENSSL_STRING_new_null()) == NULL)
goto end; goto end;
sk_OPENSSL_STRING_push(rr_from, opt_arg()); if (sk_OPENSSL_STRING_push(rr_from, opt_arg()) <= 0)
goto end;
break; break;
case OPT_RR_TO: case OPT_RR_TO:
if (rr_to == NULL if (rr_to == NULL
&& (rr_to = sk_OPENSSL_STRING_new_null()) == NULL) && (rr_to = sk_OPENSSL_STRING_new_null()) == NULL)
goto end; goto end;
sk_OPENSSL_STRING_push(rr_to, opt_arg()); if (sk_OPENSSL_STRING_push(rr_to, opt_arg()) <= 0)
goto end;
break; break;
case OPT_PRINT: case OPT_PRINT:
noout = print = 1; noout = print = 1;
@ -585,13 +587,15 @@ int cms_main(int argc, char **argv)
if (sksigners == NULL if (sksigners == NULL
&& (sksigners = sk_OPENSSL_STRING_new_null()) == NULL) && (sksigners = sk_OPENSSL_STRING_new_null()) == NULL)
goto end; goto end;
sk_OPENSSL_STRING_push(sksigners, signerfile); if (sk_OPENSSL_STRING_push(sksigners, signerfile) <= 0)
goto end;
if (keyfile == NULL) if (keyfile == NULL)
keyfile = signerfile; keyfile = signerfile;
if (skkeys == NULL if (skkeys == NULL
&& (skkeys = sk_OPENSSL_STRING_new_null()) == NULL) && (skkeys = sk_OPENSSL_STRING_new_null()) == NULL)
goto end; goto end;
sk_OPENSSL_STRING_push(skkeys, keyfile); if (sk_OPENSSL_STRING_push(skkeys, keyfile) <= 0)
goto end;
keyfile = NULL; keyfile = NULL;
} }
signerfile = opt_arg(); signerfile = opt_arg();
@ -609,12 +613,14 @@ int cms_main(int argc, char **argv)
if (sksigners == NULL if (sksigners == NULL
&& (sksigners = sk_OPENSSL_STRING_new_null()) == NULL) && (sksigners = sk_OPENSSL_STRING_new_null()) == NULL)
goto end; goto end;
sk_OPENSSL_STRING_push(sksigners, signerfile); if (sk_OPENSSL_STRING_push(sksigners, signerfile) <= 0)
goto end;
signerfile = NULL; signerfile = NULL;
if (skkeys == NULL if (skkeys == NULL
&& (skkeys = sk_OPENSSL_STRING_new_null()) == NULL) && (skkeys = sk_OPENSSL_STRING_new_null()) == NULL)
goto end; goto end;
sk_OPENSSL_STRING_push(skkeys, keyfile); if (sk_OPENSSL_STRING_push(skkeys, keyfile) <= 0)
goto end;
} }
keyfile = opt_arg(); keyfile = opt_arg();
break; break;
@ -668,7 +674,8 @@ int cms_main(int argc, char **argv)
key_param->next = nparam; key_param->next = nparam;
key_param = nparam; key_param = nparam;
} }
sk_OPENSSL_STRING_push(key_param->param, opt_arg()); if (sk_OPENSSL_STRING_push(key_param->param, opt_arg()) <= 0)
goto end;
break; break;
case OPT_V_CASES: case OPT_V_CASES:
if (!opt_verify(o, vpm)) if (!opt_verify(o, vpm))
@ -755,12 +762,14 @@ int cms_main(int argc, char **argv)
if (sksigners == NULL if (sksigners == NULL
&& (sksigners = sk_OPENSSL_STRING_new_null()) == NULL) && (sksigners = sk_OPENSSL_STRING_new_null()) == NULL)
goto end; goto end;
sk_OPENSSL_STRING_push(sksigners, signerfile); if (sk_OPENSSL_STRING_push(sksigners, signerfile) <= 0)
goto end;
if (skkeys == NULL && (skkeys = sk_OPENSSL_STRING_new_null()) == NULL) if (skkeys == NULL && (skkeys = sk_OPENSSL_STRING_new_null()) == NULL)
goto end; goto end;
if (keyfile == NULL) if (keyfile == NULL)
keyfile = signerfile; keyfile = signerfile;
sk_OPENSSL_STRING_push(skkeys, keyfile); if (sk_OPENSSL_STRING_push(skkeys, keyfile) <= 0)
goto end;
} }
if (sksigners == NULL) { if (sksigners == NULL) {
BIO_printf(bio_err, "No signer certificate specified\n"); BIO_printf(bio_err, "No signer certificate specified\n");

View File

@ -352,10 +352,12 @@ int engine_main(int argc, char **argv)
test_avail++; test_avail++;
break; break;
case OPT_PRE: case OPT_PRE:
sk_OPENSSL_STRING_push(pre_cmds, opt_arg()); if (sk_OPENSSL_STRING_push(pre_cmds, opt_arg()) <= 0)
goto end;
break; break;
case OPT_POST: case OPT_POST:
sk_OPENSSL_STRING_push(post_cmds, opt_arg()); if (sk_OPENSSL_STRING_push(post_cmds, opt_arg()) <= 0)
goto end;
break; break;
} }
} }

View File

@ -320,7 +320,8 @@ int pkcs12_main(int argc, char **argv)
if (canames == NULL if (canames == NULL
&& (canames = sk_OPENSSL_STRING_new_null()) == NULL) && (canames = sk_OPENSSL_STRING_new_null()) == NULL)
goto end; goto end;
sk_OPENSSL_STRING_push(canames, opt_arg()); if (sk_OPENSSL_STRING_push(canames, opt_arg()) <= 0)
goto end;
break; break;
case OPT_IN: case OPT_IN:
infile = opt_arg(); infile = opt_arg();

View File

@ -312,13 +312,15 @@ int smime_main(int argc, char **argv)
if (sksigners == NULL if (sksigners == NULL
&& (sksigners = sk_OPENSSL_STRING_new_null()) == NULL) && (sksigners = sk_OPENSSL_STRING_new_null()) == NULL)
goto end; goto end;
sk_OPENSSL_STRING_push(sksigners, signerfile); if (sk_OPENSSL_STRING_push(sksigners, signerfile) <= 0)
goto end;
if (keyfile == NULL) if (keyfile == NULL)
keyfile = signerfile; keyfile = signerfile;
if (skkeys == NULL if (skkeys == NULL
&& (skkeys = sk_OPENSSL_STRING_new_null()) == NULL) && (skkeys = sk_OPENSSL_STRING_new_null()) == NULL)
goto end; goto end;
sk_OPENSSL_STRING_push(skkeys, keyfile); if (sk_OPENSSL_STRING_push(skkeys, keyfile) <= 0)
goto end;
keyfile = NULL; keyfile = NULL;
} }
signerfile = opt_arg(); signerfile = opt_arg();
@ -343,12 +345,14 @@ int smime_main(int argc, char **argv)
if (sksigners == NULL if (sksigners == NULL
&& (sksigners = sk_OPENSSL_STRING_new_null()) == NULL) && (sksigners = sk_OPENSSL_STRING_new_null()) == NULL)
goto end; goto end;
sk_OPENSSL_STRING_push(sksigners, signerfile); if (sk_OPENSSL_STRING_push(sksigners, signerfile) <= 0)
goto end;
signerfile = NULL; signerfile = NULL;
if (skkeys == NULL if (skkeys == NULL
&& (skkeys = sk_OPENSSL_STRING_new_null()) == NULL) && (skkeys = sk_OPENSSL_STRING_new_null()) == NULL)
goto end; goto end;
sk_OPENSSL_STRING_push(skkeys, keyfile); if (sk_OPENSSL_STRING_push(skkeys, keyfile) <= 0)
goto end;
} }
keyfile = opt_arg(); keyfile = opt_arg();
break; break;
@ -421,12 +425,14 @@ int smime_main(int argc, char **argv)
if (sksigners == NULL if (sksigners == NULL
&& (sksigners = sk_OPENSSL_STRING_new_null()) == NULL) && (sksigners = sk_OPENSSL_STRING_new_null()) == NULL)
goto end; goto end;
sk_OPENSSL_STRING_push(sksigners, signerfile); if (sk_OPENSSL_STRING_push(sksigners, signerfile) <= 0)
goto end;
if (!skkeys && (skkeys = sk_OPENSSL_STRING_new_null()) == NULL) if (!skkeys && (skkeys = sk_OPENSSL_STRING_new_null()) == NULL)
goto end; goto end;
if (!keyfile) if (!keyfile)
keyfile = signerfile; keyfile = signerfile;
sk_OPENSSL_STRING_push(skkeys, keyfile); if (sk_OPENSSL_STRING_push(skkeys, keyfile) <= 0)
goto end;
} }
if (sksigners == NULL) { if (sksigners == NULL) {
BIO_printf(bio_err, "No signer certificate specified\n"); BIO_printf(bio_err, "No signer certificate specified\n");