crypto: ccree - rearrange init calls to avoid race
Rearrange init calls to avoid the rare race condition of the cipher algs being registered and used while we still init the hash code which uses the HW without proper lock. Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com> Reported-by: Dung Nguyen <dung.nguyen.zy@renesas.com> Tested-by: Jing Dan <jing.dan.nx@renesas.com> Tested-by: Dung Nguyen <dung.nguyen.zy@renesas.com> Fixes: 63893811b0fc("crypto: ccree - add ahash support") Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
c79c09ad31
commit
476c9ab759
|
@ -529,24 +529,26 @@ static int init_cc_resources(struct platform_device *plat_dev)
|
|||
goto post_req_mgr_err;
|
||||
}
|
||||
|
||||
/* hash must be allocated first due to use of send_request_init()
|
||||
* and dependency of AEAD on it
|
||||
*/
|
||||
rc = cc_hash_alloc(new_drvdata);
|
||||
if (rc) {
|
||||
dev_err(dev, "cc_hash_alloc failed\n");
|
||||
goto post_buf_mgr_err;
|
||||
}
|
||||
|
||||
/* Allocate crypto algs */
|
||||
rc = cc_cipher_alloc(new_drvdata);
|
||||
if (rc) {
|
||||
dev_err(dev, "cc_cipher_alloc failed\n");
|
||||
goto post_buf_mgr_err;
|
||||
}
|
||||
|
||||
/* hash must be allocated before aead since hash exports APIs */
|
||||
rc = cc_hash_alloc(new_drvdata);
|
||||
if (rc) {
|
||||
dev_err(dev, "cc_hash_alloc failed\n");
|
||||
goto post_cipher_err;
|
||||
goto post_hash_err;
|
||||
}
|
||||
|
||||
rc = cc_aead_alloc(new_drvdata);
|
||||
if (rc) {
|
||||
dev_err(dev, "cc_aead_alloc failed\n");
|
||||
goto post_hash_err;
|
||||
goto post_cipher_err;
|
||||
}
|
||||
|
||||
/* If we got here and FIPS mode is enabled
|
||||
|
@ -558,10 +560,10 @@ static int init_cc_resources(struct platform_device *plat_dev)
|
|||
pm_runtime_put(dev);
|
||||
return 0;
|
||||
|
||||
post_hash_err:
|
||||
cc_hash_free(new_drvdata);
|
||||
post_cipher_err:
|
||||
cc_cipher_free(new_drvdata);
|
||||
post_hash_err:
|
||||
cc_hash_free(new_drvdata);
|
||||
post_buf_mgr_err:
|
||||
cc_buffer_mgr_fini(new_drvdata);
|
||||
post_req_mgr_err:
|
||||
|
@ -593,8 +595,8 @@ static void cleanup_cc_resources(struct platform_device *plat_dev)
|
|||
(struct cc_drvdata *)platform_get_drvdata(plat_dev);
|
||||
|
||||
cc_aead_free(drvdata);
|
||||
cc_hash_free(drvdata);
|
||||
cc_cipher_free(drvdata);
|
||||
cc_hash_free(drvdata);
|
||||
cc_buffer_mgr_fini(drvdata);
|
||||
cc_req_mgr_fini(drvdata);
|
||||
cc_fips_fini(drvdata);
|
||||
|
|
Loading…
Reference in New Issue