siphash: Properly set mac size in sipcopy Also fully duplicate the context on dup Reviewed-by: Paul Dale <pauli@openssl.org> Reviewed-by: Matt Caswell <matt@openssl.org> (Merged from https://github.com/openssl/openssl/pull/18142)
diff --git a/providers/implementations/macs/siphash_prov.c b/providers/implementations/macs/siphash_prov.c index 2a291d7..35265e5 100644 --- a/providers/implementations/macs/siphash_prov.c +++ b/providers/implementations/macs/siphash_prov.c
@@ -77,11 +77,11 @@ if (!ossl_prov_is_running()) return NULL; - sdst = siphash_new(ssrc->provctx); + sdst = OPENSSL_malloc(sizeof(*sdst)); if (sdst == NULL) return NULL; - sdst->siphash = ssrc->siphash; + *sdst = *ssrc; return sdst; } @@ -112,7 +112,8 @@ if (!ossl_prov_is_running() || !siphash_set_params(ctx, params)) return 0; - /* Without a key, there is not much to do here, + /* + * Without a key, there is not much to do here, * The actual initialization happens through controls. */ if (key == NULL) { @@ -202,7 +203,8 @@ if ((p = OSSL_PARAM_locate_const(params, OSSL_MAC_PARAM_SIZE)) != NULL) { if (!OSSL_PARAM_get_size_t(p, &size) - || !SipHash_set_hash_size(&ctx->siphash, size)) + || !SipHash_set_hash_size(&ctx->siphash, size) + || !SipHash_set_hash_size(&ctx->sipcopy, size)) return 0; } if ((p = OSSL_PARAM_locate_const(params, OSSL_MAC_PARAM_C_ROUNDS)) != NULL