diff options
author | Pali Rohár <pali.rohar@gmail.com> | 2015-03-08 06:01:01 -0400 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2015-05-15 02:57:43 -0400 |
commit | 604c31039dae4653f33003d08c91ef58b70b5e63 (patch) | |
tree | e5621a2bae539aac9c5f413a5423749f13ceb41c /drivers/crypto | |
parent | ca7fc7e962fa067ba31f76a6e5828537394f6481 (diff) |
crypto: omap-sham - Check for return value from pm_runtime_get_sync
Function pm_runtime_get_sync could fail and we need to check return
value to prevent kernel crash.
Signed-off-by: Pali Rohár <pali.rohar@gmail.com>
Acked-by: Pavel Machek <pavel@ucw.cz>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/crypto')
-rw-r--r-- | drivers/crypto/omap-sham.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/drivers/crypto/omap-sham.c b/drivers/crypto/omap-sham.c index 4d63e0d4da9a..a6703204fd86 100644 --- a/drivers/crypto/omap-sham.c +++ b/drivers/crypto/omap-sham.c | |||
@@ -362,7 +362,13 @@ static void omap_sham_copy_ready_hash(struct ahash_request *req) | |||
362 | 362 | ||
363 | static int omap_sham_hw_init(struct omap_sham_dev *dd) | 363 | static int omap_sham_hw_init(struct omap_sham_dev *dd) |
364 | { | 364 | { |
365 | pm_runtime_get_sync(dd->dev); | 365 | int err; |
366 | |||
367 | err = pm_runtime_get_sync(dd->dev); | ||
368 | if (err < 0) { | ||
369 | dev_err(dd->dev, "failed to get sync: %d\n", err); | ||
370 | return err; | ||
371 | } | ||
366 | 372 | ||
367 | if (!test_bit(FLAGS_INIT, &dd->flags)) { | 373 | if (!test_bit(FLAGS_INIT, &dd->flags)) { |
368 | set_bit(FLAGS_INIT, &dd->flags); | 374 | set_bit(FLAGS_INIT, &dd->flags); |
@@ -1947,7 +1953,13 @@ static int omap_sham_probe(struct platform_device *pdev) | |||
1947 | 1953 | ||
1948 | pm_runtime_enable(dev); | 1954 | pm_runtime_enable(dev); |
1949 | pm_runtime_irq_safe(dev); | 1955 | pm_runtime_irq_safe(dev); |
1950 | pm_runtime_get_sync(dev); | 1956 | |
1957 | err = pm_runtime_get_sync(dev); | ||
1958 | if (err < 0) { | ||
1959 | dev_err(dev, "failed to get sync: %d\n", err); | ||
1960 | goto err_pm; | ||
1961 | } | ||
1962 | |||
1951 | rev = omap_sham_read(dd, SHA_REG_REV(dd)); | 1963 | rev = omap_sham_read(dd, SHA_REG_REV(dd)); |
1952 | pm_runtime_put_sync(&pdev->dev); | 1964 | pm_runtime_put_sync(&pdev->dev); |
1953 | 1965 | ||
@@ -1977,6 +1989,7 @@ err_algs: | |||
1977 | for (j = dd->pdata->algs_info[i].registered - 1; j >= 0; j--) | 1989 | for (j = dd->pdata->algs_info[i].registered - 1; j >= 0; j--) |
1978 | crypto_unregister_ahash( | 1990 | crypto_unregister_ahash( |
1979 | &dd->pdata->algs_info[i].algs_list[j]); | 1991 | &dd->pdata->algs_info[i].algs_list[j]); |
1992 | err_pm: | ||
1980 | pm_runtime_disable(dev); | 1993 | pm_runtime_disable(dev); |
1981 | if (dd->dma_lch) | 1994 | if (dd->dma_lch) |
1982 | dma_release_channel(dd->dma_lch); | 1995 | dma_release_channel(dd->dma_lch); |
@@ -2019,7 +2032,11 @@ static int omap_sham_suspend(struct device *dev) | |||
2019 | 2032 | ||
2020 | static int omap_sham_resume(struct device *dev) | 2033 | static int omap_sham_resume(struct device *dev) |
2021 | { | 2034 | { |
2022 | pm_runtime_get_sync(dev); | 2035 | int err = pm_runtime_get_sync(dev); |
2036 | if (err < 0) { | ||
2037 | dev_err(dev, "failed to get sync: %d\n", err); | ||
2038 | return err; | ||
2039 | } | ||
2023 | return 0; | 2040 | return 0; |
2024 | } | 2041 | } |
2025 | #endif | 2042 | #endif |