crypto: nx - Fix reentrancy bugs
authorHerbert Xu <herbert@gondor.apana.org.au>
Tue, 7 Jul 2015 09:30:25 +0000 (17:30 +0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Wed, 8 Jul 2015 07:14:13 +0000 (15:14 +0800)
commit030f4e968741d65aea9cd5f7814d1164967801ef
treef5bca6adaa4ba8f237cf0ef8a1e941e968b75ed0
parentacb33cc541d7a5495b16a133702d4c401ea4e294
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>
drivers/crypto/nx/nx-aes-ccm.c
drivers/crypto/nx/nx-aes-ctr.c
drivers/crypto/nx/nx-aes-gcm.c
drivers/crypto/nx/nx-aes-xcbc.c
drivers/crypto/nx/nx-sha256.c
drivers/crypto/nx/nx-sha512.c
drivers/crypto/nx/nx.c
drivers/crypto/nx/nx.h