mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-11-17 10:01:01 +03:00
module: icp: drop software provider generation numbers
We register all providers at once, before anything happens Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz> Closes #12901
This commit is contained in:
parent
bf3fffe70d
commit
255bc38e6f
@ -90,22 +90,8 @@ retry:
|
|||||||
return (error);
|
return (error);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
if (((ctx_tmpl = (kcf_ctx_template_t *)tmpl) != NULL))
|
||||||
* Check the validity of the context template
|
spi_ctx_tmpl = ctx_tmpl->ct_prov_tmpl;
|
||||||
* It is very rare that the generation number mis-matches, so
|
|
||||||
* is acceptable to fail here, and let the consumer recover by
|
|
||||||
* freeing this tmpl and create a new one for the key and new provider
|
|
||||||
*/
|
|
||||||
if (((ctx_tmpl = (kcf_ctx_template_t *)tmpl) != NULL)) {
|
|
||||||
if (ctx_tmpl->ct_generation != me->me_gen_swprov) {
|
|
||||||
if (list != NULL)
|
|
||||||
kcf_free_triedlist(list);
|
|
||||||
KCF_PROV_REFRELE(pd);
|
|
||||||
return (CRYPTO_OLD_CTX_TEMPLATE);
|
|
||||||
} else {
|
|
||||||
spi_ctx_tmpl = ctx_tmpl->ct_prov_tmpl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The fast path for SW providers. */
|
/* The fast path for SW providers. */
|
||||||
if (CHECK_FASTPATH(crq, pd)) {
|
if (CHECK_FASTPATH(crq, pd)) {
|
||||||
@ -193,22 +179,8 @@ retry:
|
|||||||
return (error);
|
return (error);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
if (((ctx_tmpl = (kcf_ctx_template_t *)tmpl) != NULL))
|
||||||
* Check the validity of the context template
|
spi_ctx_tmpl = ctx_tmpl->ct_prov_tmpl;
|
||||||
* It is very rare that the generation number mis-matches, so
|
|
||||||
* is acceptable to fail here, and let the consumer recover by
|
|
||||||
* freeing this tmpl and create a new one for the key and new provider
|
|
||||||
*/
|
|
||||||
if (((ctx_tmpl = (kcf_ctx_template_t *)tmpl) != NULL)) {
|
|
||||||
if (ctx_tmpl->ct_generation != me->me_gen_swprov) {
|
|
||||||
if (list != NULL)
|
|
||||||
kcf_free_triedlist(list);
|
|
||||||
KCF_PROV_REFRELE(pd);
|
|
||||||
return (CRYPTO_OLD_CTX_TEMPLATE);
|
|
||||||
} else {
|
|
||||||
spi_ctx_tmpl = ctx_tmpl->ct_prov_tmpl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The fast path for SW providers. */
|
/* The fast path for SW providers. */
|
||||||
if (CHECK_FASTPATH(crq, pd)) {
|
if (CHECK_FASTPATH(crq, pd)) {
|
||||||
|
@ -104,7 +104,6 @@ crypto_create_ctx_template(crypto_mechanism_t *mech, crypto_key_t *key,
|
|||||||
&(ctx_tmpl->ct_prov_tmpl), &(ctx_tmpl->ct_size), KCF_RHNDL(kmflag));
|
&(ctx_tmpl->ct_prov_tmpl), &(ctx_tmpl->ct_size), KCF_RHNDL(kmflag));
|
||||||
|
|
||||||
if (error == CRYPTO_SUCCESS) {
|
if (error == CRYPTO_SUCCESS) {
|
||||||
ctx_tmpl->ct_generation = me->me_gen_swprov;
|
|
||||||
*ptmpl = ctx_tmpl;
|
*ptmpl = ctx_tmpl;
|
||||||
} else {
|
} else {
|
||||||
kmem_free(ctx_tmpl, sizeof (kcf_ctx_template_t));
|
kmem_free(ctx_tmpl, sizeof (kcf_ctx_template_t));
|
||||||
|
@ -109,22 +109,8 @@ retry:
|
|||||||
return (error);
|
return (error);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
if (((ctx_tmpl = (kcf_ctx_template_t *)tmpl) != NULL))
|
||||||
* Check the validity of the context template
|
spi_ctx_tmpl = ctx_tmpl->ct_prov_tmpl;
|
||||||
* It is very rare that the generation number mis-matches, so
|
|
||||||
* is acceptable to fail here, and let the consumer recover by
|
|
||||||
* freeing this tmpl and create a new one for the key and new provider
|
|
||||||
*/
|
|
||||||
if (((ctx_tmpl = (kcf_ctx_template_t *)tmpl) != NULL)) {
|
|
||||||
if (ctx_tmpl->ct_generation != me->me_gen_swprov) {
|
|
||||||
if (list != NULL)
|
|
||||||
kcf_free_triedlist(list);
|
|
||||||
KCF_PROV_REFRELE(pd);
|
|
||||||
return (CRYPTO_OLD_CTX_TEMPLATE);
|
|
||||||
} else {
|
|
||||||
spi_ctx_tmpl = ctx_tmpl->ct_prov_tmpl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The fast path for SW providers. */
|
/* The fast path for SW providers. */
|
||||||
if (CHECK_FASTPATH(crq, pd)) {
|
if (CHECK_FASTPATH(crq, pd)) {
|
||||||
@ -185,22 +171,8 @@ retry:
|
|||||||
return (error);
|
return (error);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
if (((ctx_tmpl = (kcf_ctx_template_t *)tmpl) != NULL))
|
||||||
* Check the validity of the context template
|
spi_ctx_tmpl = ctx_tmpl->ct_prov_tmpl;
|
||||||
* It is very rare that the generation number mis-matches, so
|
|
||||||
* is acceptable to fail here, and let the consumer recover by
|
|
||||||
* freeing this tmpl and create a new one for the key and new provider
|
|
||||||
*/
|
|
||||||
if (((ctx_tmpl = (kcf_ctx_template_t *)tmpl) != NULL)) {
|
|
||||||
if (ctx_tmpl->ct_generation != me->me_gen_swprov) {
|
|
||||||
if (list != NULL)
|
|
||||||
kcf_free_triedlist(list);
|
|
||||||
KCF_PROV_REFRELE(pd);
|
|
||||||
return (CRYPTO_OLD_CTX_TEMPLATE);
|
|
||||||
} else {
|
|
||||||
spi_ctx_tmpl = ctx_tmpl->ct_prov_tmpl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The fast path for SW providers. */
|
/* The fast path for SW providers. */
|
||||||
if (CHECK_FASTPATH(crq, pd)) {
|
if (CHECK_FASTPATH(crq, pd)) {
|
||||||
@ -345,16 +317,8 @@ retry:
|
|||||||
* freeing this tmpl and create a new one for the key and new provider
|
* freeing this tmpl and create a new one for the key and new provider
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (((ctx_tmpl = (kcf_ctx_template_t *)tmpl) != NULL)) {
|
if (((ctx_tmpl = (kcf_ctx_template_t *)tmpl) != NULL))
|
||||||
if (ctx_tmpl->ct_generation != me->me_gen_swprov) {
|
spi_ctx_tmpl = ctx_tmpl->ct_prov_tmpl;
|
||||||
if (list != NULL)
|
|
||||||
kcf_free_triedlist(list);
|
|
||||||
KCF_PROV_REFRELE(pd);
|
|
||||||
return (CRYPTO_OLD_CTX_TEMPLATE);
|
|
||||||
} else {
|
|
||||||
spi_ctx_tmpl = ctx_tmpl->ct_prov_tmpl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
error = crypto_mac_init_prov(pd, pd->pd_sid, mech, key,
|
error = crypto_mac_init_prov(pd, pd->pd_sid, mech, key,
|
||||||
spi_ctx_tmpl, ctxp, crq);
|
spi_ctx_tmpl, ctxp, crq);
|
||||||
|
@ -111,7 +111,6 @@ static const int kcf_bf_threshold = 512;
|
|||||||
static const int kcf_rc4_threshold = 512;
|
static const int kcf_rc4_threshold = 512;
|
||||||
|
|
||||||
static kmutex_t kcf_mech_tabs_lock;
|
static kmutex_t kcf_mech_tabs_lock;
|
||||||
static uint32_t kcf_gen_swprov = 0;
|
|
||||||
|
|
||||||
static const int kcf_mech_hash_size = 256;
|
static const int kcf_mech_hash_size = 256;
|
||||||
static mod_hash_t *kcf_mech_hash; /* mech name to id hash */
|
static mod_hash_t *kcf_mech_hash; /* mech name to id hash */
|
||||||
@ -446,9 +445,6 @@ kcf_add_mech_provider(short mech_indx,
|
|||||||
* this mechanism.
|
* this mechanism.
|
||||||
*/
|
*/
|
||||||
mech_entry->me_sw_prov = prov_mech;
|
mech_entry->me_sw_prov = prov_mech;
|
||||||
|
|
||||||
/* We'll wrap around after 4 billion registrations! */
|
|
||||||
mech_entry->me_gen_swprov = kcf_gen_swprov++;
|
|
||||||
}
|
}
|
||||||
mutex_exit(&mech_entry->me_mutex);
|
mutex_exit(&mech_entry->me_mutex);
|
||||||
|
|
||||||
|
@ -263,11 +263,6 @@ typedef struct kcf_mech_entry {
|
|||||||
crypto_mech_type_t me_mechid; /* Internal id for mechanism */
|
crypto_mech_type_t me_mechid; /* Internal id for mechanism */
|
||||||
kmutex_t me_mutex; /* access protection */
|
kmutex_t me_mutex; /* access protection */
|
||||||
kcf_prov_mech_desc_t *me_sw_prov; /* provider */
|
kcf_prov_mech_desc_t *me_sw_prov; /* provider */
|
||||||
/*
|
|
||||||
* When a provider is present, this is the generation number that
|
|
||||||
* ensures no objects from old providers are used in the new one
|
|
||||||
*/
|
|
||||||
uint32_t me_gen_swprov;
|
|
||||||
/*
|
/*
|
||||||
* threshold for using hardware providers for this mech
|
* threshold for using hardware providers for this mech
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user