crypto: nx - Fix reentrancy bugs
This patch fixes a host of reentrancy bugs in the nx driver. The following algorithms are affected: * CCM * GCM * CTR * XCBC * SHA256 * SHA512 The crypto API allows a single transform to be used by multiple threads simultaneously. For example, IPsec will use a single tfm to process packets for a given SA. As packets may arrive on multiple CPUs that tfm must be reentrant. The nx driver does try to deal with this by using a spin lock. Unfortunately only the basic AES/CBC/ECB algorithms do this in the correct way. The symptom of these bugs may range from the generation of incorrect output to memory corruption. Cc: stable@vger.kernel.org Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
このコミットが含まれているのは:
@@ -494,8 +494,9 @@ out:
|
||||
static int ccm4309_aes_nx_encrypt(struct aead_request *req)
|
||||
{
|
||||
struct nx_crypto_ctx *nx_ctx = crypto_tfm_ctx(req->base.tfm);
|
||||
struct nx_gcm_rctx *rctx = aead_request_ctx(req);
|
||||
struct blkcipher_desc desc;
|
||||
u8 *iv = nx_ctx->priv.ccm.iv;
|
||||
u8 *iv = rctx->iv;
|
||||
|
||||
iv[0] = 3;
|
||||
memcpy(iv + 1, nx_ctx->priv.ccm.nonce, 3);
|
||||
@@ -525,8 +526,9 @@ static int ccm_aes_nx_encrypt(struct aead_request *req)
|
||||
static int ccm4309_aes_nx_decrypt(struct aead_request *req)
|
||||
{
|
||||
struct nx_crypto_ctx *nx_ctx = crypto_tfm_ctx(req->base.tfm);
|
||||
struct nx_gcm_rctx *rctx = aead_request_ctx(req);
|
||||
struct blkcipher_desc desc;
|
||||
u8 *iv = nx_ctx->priv.ccm.iv;
|
||||
u8 *iv = rctx->iv;
|
||||
|
||||
iv[0] = 3;
|
||||
memcpy(iv + 1, nx_ctx->priv.ccm.nonce, 3);
|
||||
|
新しいイシューから参照
ユーザーをブロックする