crypto: omap-des - fix crypto engine initialization order
The crypto engine must be initialized before registering algorithms,
otherwise the test manager will crash as it attempts to execute
tests for the algos while they are being registered.
Fixes: f1b77aaca8
("crypto: omap-des - Integrate with the crypto engine framework")
Signed-off-by: Tero Kristo <t-kristo@ti.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Этот коммит содержится в:

коммит произвёл
Herbert Xu

родитель
0d0cda93de
Коммит
1d1f98d180
@@ -1079,6 +1079,17 @@ static int omap_des_probe(struct platform_device *pdev)
|
||||
list_add_tail(&dd->list, &dev_list);
|
||||
spin_unlock(&list_lock);
|
||||
|
||||
/* Initialize des crypto engine */
|
||||
dd->engine = crypto_engine_alloc_init(dev, 1);
|
||||
if (!dd->engine)
|
||||
goto err_engine;
|
||||
|
||||
dd->engine->prepare_cipher_request = omap_des_prepare_req;
|
||||
dd->engine->cipher_one_request = omap_des_crypt_req;
|
||||
err = crypto_engine_start(dd->engine);
|
||||
if (err)
|
||||
goto err_engine;
|
||||
|
||||
for (i = 0; i < dd->pdata->algs_info_size; i++) {
|
||||
for (j = 0; j < dd->pdata->algs_info[i].size; j++) {
|
||||
algp = &dd->pdata->algs_info[i].algs_list[j];
|
||||
@@ -1094,27 +1105,18 @@ static int omap_des_probe(struct platform_device *pdev)
|
||||
}
|
||||
}
|
||||
|
||||
/* Initialize des crypto engine */
|
||||
dd->engine = crypto_engine_alloc_init(dev, 1);
|
||||
if (!dd->engine)
|
||||
goto err_algs;
|
||||
|
||||
dd->engine->prepare_cipher_request = omap_des_prepare_req;
|
||||
dd->engine->cipher_one_request = omap_des_crypt_req;
|
||||
err = crypto_engine_start(dd->engine);
|
||||
if (err)
|
||||
goto err_engine;
|
||||
|
||||
return 0;
|
||||
|
||||
err_engine:
|
||||
crypto_engine_exit(dd->engine);
|
||||
err_algs:
|
||||
for (i = dd->pdata->algs_info_size - 1; i >= 0; i--)
|
||||
for (j = dd->pdata->algs_info[i].registered - 1; j >= 0; j--)
|
||||
crypto_unregister_alg(
|
||||
&dd->pdata->algs_info[i].algs_list[j]);
|
||||
|
||||
err_engine:
|
||||
if (dd->engine)
|
||||
crypto_engine_exit(dd->engine);
|
||||
|
||||
omap_des_dma_cleanup(dd);
|
||||
err_irq:
|
||||
tasklet_kill(&dd->done_task);
|
||||
|
Ссылка в новой задаче
Block a user