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>
This commit is contained in:
@@ -2,6 +2,8 @@
|
||||
#ifndef __NX_H__
|
||||
#define __NX_H__
|
||||
|
||||
#include <crypto/ctr.h>
|
||||
|
||||
#define NX_NAME "nx-crypto"
|
||||
#define NX_STRING "IBM Power7+ Nest Accelerator Crypto Driver"
|
||||
#define NX_VERSION "1.0"
|
||||
@@ -91,8 +93,11 @@ struct nx_crypto_driver {
|
||||
|
||||
#define NX_GCM4106_NONCE_LEN (4)
|
||||
#define NX_GCM_CTR_OFFSET (12)
|
||||
struct nx_gcm_priv {
|
||||
struct nx_gcm_rctx {
|
||||
u8 iv[16];
|
||||
};
|
||||
|
||||
struct nx_gcm_priv {
|
||||
u8 iauth_tag[16];
|
||||
u8 nonce[NX_GCM4106_NONCE_LEN];
|
||||
};
|
||||
@@ -100,8 +105,11 @@ struct nx_gcm_priv {
|
||||
#define NX_CCM_AES_KEY_LEN (16)
|
||||
#define NX_CCM4309_AES_KEY_LEN (19)
|
||||
#define NX_CCM4309_NONCE_LEN (3)
|
||||
struct nx_ccm_priv {
|
||||
struct nx_ccm_rctx {
|
||||
u8 iv[16];
|
||||
};
|
||||
|
||||
struct nx_ccm_priv {
|
||||
u8 b0[16];
|
||||
u8 iauth_tag[16];
|
||||
u8 oauth_tag[16];
|
||||
@@ -113,7 +121,7 @@ struct nx_xcbc_priv {
|
||||
};
|
||||
|
||||
struct nx_ctr_priv {
|
||||
u8 iv[16];
|
||||
u8 nonce[CTR_RFC3686_NONCE_SIZE];
|
||||
};
|
||||
|
||||
struct nx_crypto_ctx {
|
||||
|
Reference in New Issue
Block a user