We fix the dsa, dh, ec and rsa export routines so that they are
consistent with each other and do not report success if the allocation
of parameters failed.
This is essentially the same fix as applied in #18483 but applied to all
relevant key types.
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/18507)
ok = ok && ossl_dh_key_todata(dh, tmpl, NULL, include_private);
}
ok = ok && ossl_dh_key_todata(dh, tmpl, NULL, include_private);
}
- if (!ok
- || (params = OSSL_PARAM_BLD_to_param(tmpl)) == NULL) {
+ if (!ok || (params = OSSL_PARAM_BLD_to_param(tmpl)) == NULL) {
ok = param_cb(params, cbarg);
OSSL_PARAM_free(params);
err:
ok = param_cb(params, cbarg);
OSSL_PARAM_free(params);
err:
ok = ok && dsa_key_todata(dsa, tmpl, NULL, include_private);
}
ok = ok && dsa_key_todata(dsa, tmpl, NULL, include_private);
}
- if (!ok
- || (params = OSSL_PARAM_BLD_to_param(tmpl)) == NULL)
+ if (!ok || (params = OSSL_PARAM_BLD_to_param(tmpl)) == NULL) {
+ ok = 0;
ok = param_cb(params, cbarg);
OSSL_PARAM_free(params);
ok = param_cb(params, cbarg);
OSSL_PARAM_free(params);
if ((selection & OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS) != 0)
ok = ok && otherparams_to_params(ec, tmpl, NULL);
if ((selection & OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS) != 0)
ok = ok && otherparams_to_params(ec, tmpl, NULL);
- if (ok && (params = OSSL_PARAM_BLD_to_param(tmpl)) != NULL)
- ok = param_cb(params, cbarg);
- else
+ if (!ok || (params = OSSL_PARAM_BLD_to_param(tmpl)) == NULL) {
+ goto end;
+ }
+
+ ok = param_cb(params, cbarg);
OSSL_PARAM_BLD_free(tmpl);
OPENSSL_free(pub_key);
OPENSSL_free(genbuf);
OSSL_PARAM_BLD_free(tmpl);
OPENSSL_free(pub_key);
OPENSSL_free(genbuf);
ok = ok && ossl_rsa_todata(rsa, tmpl, NULL, include_private);
}
ok = ok && ossl_rsa_todata(rsa, tmpl, NULL, include_private);
}
- if (!ok
- || (params = OSSL_PARAM_BLD_to_param(tmpl)) == NULL)
+ if (!ok || (params = OSSL_PARAM_BLD_to_param(tmpl)) == NULL) {
+ ok = 0;
ok = param_callback(params, cbarg);
OSSL_PARAM_free(params);
ok = param_callback(params, cbarg);
OSSL_PARAM_free(params);