diff options
author | Alex Porosanu <alexandru.porosanu@freescale.com> | 2013-09-09 11:56:29 -0400 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2013-09-13 07:43:54 -0400 |
commit | b2744dfd39c51e6fd56e79ff2eabf9953d45027e (patch) | |
tree | 74176b26f6c819672946910cbf98d1c71e199496 | |
parent | d5e4e999cda51eaa62e662088579fcce0ac79e92 (diff) |
crypto: caam - fix hash, alg and rng registration if CAAM driver not initialized
If the CAAM driver initialization failed (due to various reasons, e.g. RNG4
initialization failed), then the registration of hash/algorithms/rng shouldn't
take place. This patch adds the necessary code to prevent this registration.
Signed-off-by: Alex Porosanu <alexandru.porosanu@freescale.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
-rw-r--r-- | drivers/crypto/caam/caamalg.c | 7 | ||||
-rw-r--r-- | drivers/crypto/caam/caamhash.c | 7 | ||||
-rw-r--r-- | drivers/crypto/caam/caamrng.c | 7 |
3 files changed, 21 insertions, 0 deletions
diff --git a/drivers/crypto/caam/caamalg.c b/drivers/crypto/caam/caamalg.c index 7c63b72ecd75..86a0d415b9a7 100644 --- a/drivers/crypto/caam/caamalg.c +++ b/drivers/crypto/caam/caamalg.c | |||
@@ -2209,6 +2209,13 @@ static int __init caam_algapi_init(void) | |||
2209 | priv = dev_get_drvdata(ctrldev); | 2209 | priv = dev_get_drvdata(ctrldev); |
2210 | of_node_put(dev_node); | 2210 | of_node_put(dev_node); |
2211 | 2211 | ||
2212 | /* | ||
2213 | * If priv is NULL, it's probably because the caam driver wasn't | ||
2214 | * properly initialized (e.g. RNG4 init failed). Thus, bail out here. | ||
2215 | */ | ||
2216 | if (!priv) | ||
2217 | return -ENODEV; | ||
2218 | |||
2212 | INIT_LIST_HEAD(&priv->alg_list); | 2219 | INIT_LIST_HEAD(&priv->alg_list); |
2213 | 2220 | ||
2214 | atomic_set(&priv->tfm_count, -1); | 2221 | atomic_set(&priv->tfm_count, -1); |
diff --git a/drivers/crypto/caam/caamhash.c b/drivers/crypto/caam/caamhash.c index e732bd962e98..ca6218eee460 100644 --- a/drivers/crypto/caam/caamhash.c +++ b/drivers/crypto/caam/caamhash.c | |||
@@ -1833,6 +1833,13 @@ static int __init caam_algapi_hash_init(void) | |||
1833 | priv = dev_get_drvdata(ctrldev); | 1833 | priv = dev_get_drvdata(ctrldev); |
1834 | of_node_put(dev_node); | 1834 | of_node_put(dev_node); |
1835 | 1835 | ||
1836 | /* | ||
1837 | * If priv is NULL, it's probably because the caam driver wasn't | ||
1838 | * properly initialized (e.g. RNG4 init failed). Thus, bail out here. | ||
1839 | */ | ||
1840 | if (!priv) | ||
1841 | return -ENODEV; | ||
1842 | |||
1836 | INIT_LIST_HEAD(&priv->hash_list); | 1843 | INIT_LIST_HEAD(&priv->hash_list); |
1837 | 1844 | ||
1838 | atomic_set(&priv->tfm_count, -1); | 1845 | atomic_set(&priv->tfm_count, -1); |
diff --git a/drivers/crypto/caam/caamrng.c b/drivers/crypto/caam/caamrng.c index d1939a9539c0..588ad2288f82 100644 --- a/drivers/crypto/caam/caamrng.c +++ b/drivers/crypto/caam/caamrng.c | |||
@@ -298,6 +298,13 @@ static int __init caam_rng_init(void) | |||
298 | priv = dev_get_drvdata(ctrldev); | 298 | priv = dev_get_drvdata(ctrldev); |
299 | of_node_put(dev_node); | 299 | of_node_put(dev_node); |
300 | 300 | ||
301 | /* | ||
302 | * If priv is NULL, it's probably because the caam driver wasn't | ||
303 | * properly initialized (e.g. RNG4 init failed). Thus, bail out here. | ||
304 | */ | ||
305 | if (!priv) | ||
306 | return -ENODEV; | ||
307 | |||
301 | caam_init_rng(&rng_ctx, priv->jrdev[0]); | 308 | caam_init_rng(&rng_ctx, priv->jrdev[0]); |
302 | 309 | ||
303 | dev_info(priv->jrdev[0], "registering rng-caam\n"); | 310 | dev_info(priv->jrdev[0], "registering rng-caam\n"); |