aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/crypto/omap-aes.c
diff options
context:
space:
mode:
authorNishanth Menon <nm@ti.com>2013-12-03 20:43:13 -0500
committerHerbert Xu <herbert@gondor.apana.org.au>2013-12-05 08:28:43 -0500
commitf7b2b5dd6a62a47e871627c71ed01aa3482154d9 (patch)
tree4de401a7a20a39b801b5d2e672e7c3e9b5afc125 /drivers/crypto/omap-aes.c
parentc0e656b7a6e1ac03b2921d49211a735893efd544 (diff)
crypto: omap-aes - add error check for pm_runtime_get_sync
The AES driver currently assumes that pm_runtime_get_sync will always succeed, which may not always be true, so add error handling for the same. This scenario was reported in the following bug: place. https://bugzilla.kernel.org/show_bug.cgi?id=66441 Reported-by: Tobias Jakobi <tjakobi@math.uni-bielefeld.de> Signed-off-by: Nishanth Menon <nm@ti.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/crypto/omap-aes.c')
-rw-r--r--drivers/crypto/omap-aes.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/drivers/crypto/omap-aes.c b/drivers/crypto/omap-aes.c
index a9ccbf14096e..dde41f1df608 100644
--- a/drivers/crypto/omap-aes.c
+++ b/drivers/crypto/omap-aes.c
@@ -784,6 +784,7 @@ static int omap_aes_ctr_decrypt(struct ablkcipher_request *req)
784static int omap_aes_cra_init(struct crypto_tfm *tfm) 784static int omap_aes_cra_init(struct crypto_tfm *tfm)
785{ 785{
786 struct omap_aes_dev *dd = NULL; 786 struct omap_aes_dev *dd = NULL;
787 int err;
787 788
788 /* Find AES device, currently picks the first device */ 789 /* Find AES device, currently picks the first device */
789 spin_lock_bh(&list_lock); 790 spin_lock_bh(&list_lock);
@@ -792,7 +793,13 @@ static int omap_aes_cra_init(struct crypto_tfm *tfm)
792 } 793 }
793 spin_unlock_bh(&list_lock); 794 spin_unlock_bh(&list_lock);
794 795
795 pm_runtime_get_sync(dd->dev); 796 err = pm_runtime_get_sync(dd->dev);
797 if (err < 0) {
798 dev_err(dd->dev, "%s: failed to get_sync(%d)\n",
799 __func__, err);
800 return err;
801 }
802
796 tfm->crt_ablkcipher.reqsize = sizeof(struct omap_aes_reqctx); 803 tfm->crt_ablkcipher.reqsize = sizeof(struct omap_aes_reqctx);
797 804
798 return 0; 805 return 0;
@@ -1182,7 +1189,12 @@ static int omap_aes_probe(struct platform_device *pdev)
1182 dd->phys_base = res.start; 1189 dd->phys_base = res.start;
1183 1190
1184 pm_runtime_enable(dev); 1191 pm_runtime_enable(dev);
1185 pm_runtime_get_sync(dev); 1192 err = pm_runtime_get_sync(dev);
1193 if (err < 0) {
1194 dev_err(dev, "%s: failed to get_sync(%d)\n",
1195 __func__, err);
1196 goto err_res;
1197 }
1186 1198
1187 omap_aes_dma_stop(dd); 1199 omap_aes_dma_stop(dd);
1188 1200