From 88d7ed35085184f15a2af3d9e88d775059b2f307 Mon Sep 17 00:00:00 2001 From: Dmitry Kasatkin Date: Mon, 5 Dec 2011 13:17:41 +0200 Subject: evm: key must be set once during initialization 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 Acked-by: Mimi Zohar Signed-off-by: James Morris --- security/integrity/evm/evm_crypto.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'security/integrity/evm') diff --git a/security/integrity/evm/evm_crypto.c b/security/integrity/evm/evm_crypto.c index 847a2d7dff17..3b9f5a080e4f 100644 --- a/security/integrity/evm/evm_crypto.c +++ b/security/integrity/evm/evm_crypto.c @@ -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), @@ -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); -- cgit v1.2.3