Skip to content

Commit

Permalink
evm: key must be set once during initialization
Browse files Browse the repository at this point in the history
On multi-core systems, setting of the key before every caclculation,
causes invalid HMAC calculation for other tfm users, because internal
state (ipad, opad) can be invalid before set key call returns.
It needs to be set only once during initialization.

Signed-off-by: Dmitry Kasatkin <dmitry.kasatkin@intel.com>
Acked-by: Mimi Zohar <zohar@us.ibm.com>
Signed-off-by: James Morris <jmorris@namei.org>
  • Loading branch information
Dmitry Kasatkin authored and James Morris committed Dec 7, 2011
1 parent fe0e94c commit 88d7ed3
Showing 1 changed file with 8 additions and 7 deletions.
15 changes: 8 additions & 7 deletions security/integrity/evm/evm_crypto.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,14 @@ static struct shash_desc *init_desc(const char type)
*tfm = NULL;
return ERR_PTR(rc);
}
if (type == EVM_XATTR_HMAC) {
rc = crypto_shash_setkey(*tfm, evmkey, evmkey_len);
if (rc) {
crypto_free_shash(*tfm);
*tfm = NULL;
return ERR_PTR(rc);
}
}
}

desc = kmalloc(sizeof(*desc) + crypto_shash_descsize(*tfm),
Expand All @@ -62,14 +70,7 @@ static struct shash_desc *init_desc(const char type)
desc->tfm = *tfm;
desc->flags = CRYPTO_TFM_REQ_MAY_SLEEP;

if (type == EVM_XATTR_HMAC) {
rc = crypto_shash_setkey(*tfm, evmkey, evmkey_len);
if (rc)
goto out;
}

rc = crypto_shash_init(desc);
out:
if (rc) {
kfree(desc);
return ERR_PTR(rc);
Expand Down

0 comments on commit 88d7ed3

Please sign in to comment.