Revert "crypto: gcm - fix incompatibility between "gcm" and "gcm_base""
Isuue: Device crashes at some point due to BUG(); in HPGOV driver along
------ with the following spam in logs.
kworker/u17:3:11627 notify_prepare: attempt to bring up CPU 6 failed
rker/u17:3:11627 cpu_hotplug_in: Failed to hotplug in CPU6 with error -1
kworker/u17:1: 1353 do_cpu_hotplug: enable_cpus=6-7 fast_hp=0
kworker/u17:1: 1353 do_cpu_hotplug: disable_cpus= fast_hp=0
kworker/u17:1: 1353 zswap: could not alloc crypto comp zstd : -13
Testing: When disabling CRYPTO_FIPS we never faced such an issue which
-------- indicate that codes under FIPS may be conflicting with changes
in this commit.
Solution: So far, until a proper solution is found, revert this change.
---------
This reverts commit 62d629a5a9
.
**Thanks for ianmacd for pointing to the problematic commit.
Suggested-by: ianmacd <ian@caliban.org>
Signed-off-by: FAROVITUS <farovitus@gmail.com>
This commit is contained in:
parent
485e8d0250
commit
24c9c72f72
1 changed files with 24 additions and 12 deletions
36
crypto/gcm.c
36
crypto/gcm.c
|
@ -616,6 +616,7 @@ static void crypto_gcm_free(struct aead_instance *inst)
|
|||
|
||||
static int crypto_gcm_create_common(struct crypto_template *tmpl,
|
||||
struct rtattr **tb,
|
||||
const char *full_name,
|
||||
const char *ctr_name,
|
||||
const char *ghash_name)
|
||||
{
|
||||
|
@ -656,8 +657,7 @@ static int crypto_gcm_create_common(struct crypto_template *tmpl,
|
|||
goto err_free_inst;
|
||||
|
||||
err = -EINVAL;
|
||||
if (strcmp(ghash->base.cra_name, "ghash") != 0 ||
|
||||
ghash->digestsize != 16)
|
||||
if (ghash->digestsize != 16)
|
||||
goto err_drop_ghash;
|
||||
|
||||
crypto_set_skcipher_spawn(&ctx->ctr, aead_crypto_instance(inst));
|
||||
|
@ -669,24 +669,24 @@ static int crypto_gcm_create_common(struct crypto_template *tmpl,
|
|||
|
||||
ctr = crypto_spawn_skcipher_alg(&ctx->ctr);
|
||||
|
||||
/* The skcipher algorithm must be CTR mode, using 16-byte blocks. */
|
||||
/* We only support 16-byte blocks. */
|
||||
err = -EINVAL;
|
||||
if (strncmp(ctr->base.cra_name, "ctr(", 4) != 0 ||
|
||||
crypto_skcipher_alg_ivsize(ctr) != 16 ||
|
||||
ctr->base.cra_blocksize != 1)
|
||||
if (crypto_skcipher_alg_ivsize(ctr) != 16)
|
||||
goto out_put_ctr;
|
||||
|
||||
/* Not a stream cipher? */
|
||||
if (ctr->base.cra_blocksize != 1)
|
||||
goto out_put_ctr;
|
||||
|
||||
err = -ENAMETOOLONG;
|
||||
if (snprintf(inst->alg.base.cra_name, CRYPTO_MAX_ALG_NAME,
|
||||
"gcm(%s", ctr->base.cra_name + 4) >= CRYPTO_MAX_ALG_NAME)
|
||||
goto out_put_ctr;
|
||||
|
||||
if (snprintf(inst->alg.base.cra_driver_name, CRYPTO_MAX_ALG_NAME,
|
||||
"gcm_base(%s,%s)", ctr->base.cra_driver_name,
|
||||
ghash_alg->cra_driver_name) >=
|
||||
CRYPTO_MAX_ALG_NAME)
|
||||
goto out_put_ctr;
|
||||
|
||||
memcpy(inst->alg.base.cra_name, full_name, CRYPTO_MAX_ALG_NAME);
|
||||
|
||||
inst->alg.base.cra_flags = (ghash->base.cra_flags |
|
||||
ctr->base.cra_flags) & CRYPTO_ALG_ASYNC;
|
||||
inst->alg.base.cra_priority = (ghash->base.cra_priority +
|
||||
|
@ -728,6 +728,7 @@ static int crypto_gcm_create(struct crypto_template *tmpl, struct rtattr **tb)
|
|||
{
|
||||
const char *cipher_name;
|
||||
char ctr_name[CRYPTO_MAX_ALG_NAME];
|
||||
char full_name[CRYPTO_MAX_ALG_NAME];
|
||||
|
||||
cipher_name = crypto_attr_alg_name(tb[1]);
|
||||
if (IS_ERR(cipher_name))
|
||||
|
@ -737,7 +738,12 @@ static int crypto_gcm_create(struct crypto_template *tmpl, struct rtattr **tb)
|
|||
CRYPTO_MAX_ALG_NAME)
|
||||
return -ENAMETOOLONG;
|
||||
|
||||
return crypto_gcm_create_common(tmpl, tb, ctr_name, "ghash");
|
||||
if (snprintf(full_name, CRYPTO_MAX_ALG_NAME, "gcm(%s)", cipher_name) >=
|
||||
CRYPTO_MAX_ALG_NAME)
|
||||
return -ENAMETOOLONG;
|
||||
|
||||
return crypto_gcm_create_common(tmpl, tb, full_name,
|
||||
ctr_name, "ghash");
|
||||
}
|
||||
|
||||
static struct crypto_template crypto_gcm_tmpl = {
|
||||
|
@ -751,6 +757,7 @@ static int crypto_gcm_base_create(struct crypto_template *tmpl,
|
|||
{
|
||||
const char *ctr_name;
|
||||
const char *ghash_name;
|
||||
char full_name[CRYPTO_MAX_ALG_NAME];
|
||||
|
||||
ctr_name = crypto_attr_alg_name(tb[1]);
|
||||
if (IS_ERR(ctr_name))
|
||||
|
@ -760,7 +767,12 @@ static int crypto_gcm_base_create(struct crypto_template *tmpl,
|
|||
if (IS_ERR(ghash_name))
|
||||
return PTR_ERR(ghash_name);
|
||||
|
||||
return crypto_gcm_create_common(tmpl, tb, ctr_name, ghash_name);
|
||||
if (snprintf(full_name, CRYPTO_MAX_ALG_NAME, "gcm_base(%s,%s)",
|
||||
ctr_name, ghash_name) >= CRYPTO_MAX_ALG_NAME)
|
||||
return -ENAMETOOLONG;
|
||||
|
||||
return crypto_gcm_create_common(tmpl, tb, full_name,
|
||||
ctr_name, ghash_name);
|
||||
}
|
||||
|
||||
static struct crypto_template crypto_gcm_base_tmpl = {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue