diff mbox series

[v2] crypto: octeontx2: fix NULL pointer dereference

Message ID 3ef09bf0c4adf7bc33f01f60cb8ce96e8f77b58c.1642786900.git.sthotton@marvell.com
State Superseded
Headers show
Series [v2] crypto: octeontx2: fix NULL pointer dereference | expand

Commit Message

Shijith Thotton Jan. 21, 2022, 5:43 p.m. UTC
CONFIG_DM_CRYPT is checked before registering ciphers, but not before
unregister. This could lead to a NULL pointer dereference during driver
release (in unregister) if CONFIG_DM_CRYPT is enabled.

...
Unable to handle kernel NULL pointer dereference at virtual address 0000000000000008
...
Call trace:
 crypto_unregister_alg+0x68/0xfc
 crypto_unregister_skciphers+0x44/0x60
 otx2_cpt_crypto_exit+0x100/0x1a0
 otx2_cptvf_remove+0xf8/0x200
 pci_device_remove+0x3c/0xd4
 __device_release_driver+0x188/0x234
 device_release_driver+0x2c/0x4c
...

Added a CONFIG_DM_CRYPT check, similar to register, in unregister to
avoid this.

Fixes: 6f03f0e8b6c8 ("crypto: octeontx2 - register with linux crypto framework")

Signed-off-by: Shijith Thotton <sthotton@marvell.com>
---
v2:
- Added fixes line to commit message.

 drivers/crypto/marvell/octeontx2/otx2_cptvf_algs.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

Comments

Herbert Xu Feb. 5, 2022, 4:32 a.m. UTC | #1
On Fri, Jan 28, 2022 at 07:27:42PM +0530, Shijith Thotton wrote:
> No issues were found while using the driver with dm-crypt enabled. So
> CONFIG_DM_CRYPT check in the driver can be removed.
> 
> This also fixes the NULL pointer dereference in driver release if
> CONFIG_DM_CRYPT is enabled.
> 
> ...
> Unable to handle kernel NULL pointer dereference at virtual address 0000000000000008
> ...
> Call trace:
>  crypto_unregister_alg+0x68/0xfc
>  crypto_unregister_skciphers+0x44/0x60
>  otx2_cpt_crypto_exit+0x100/0x1a0
>  otx2_cptvf_remove+0xf8/0x200
>  pci_device_remove+0x3c/0xd4
>  __device_release_driver+0x188/0x234
>  device_release_driver+0x2c/0x4c
> ...
> 
> Fixes: 6f03f0e8b6c8 ("crypto: octeontx2 - register with linux crypto framework")
> Signed-off-by: Shijith Thotton <sthotton@marvell.com>
> ---
>  .../crypto/marvell/octeontx2/otx2_cptvf_algs.c  | 17 +++++++----------
>  1 file changed, 7 insertions(+), 10 deletions(-)

Patch applied.  Thanks.
diff mbox series

Patch

diff --git a/drivers/crypto/marvell/octeontx2/otx2_cptvf_algs.c b/drivers/crypto/marvell/octeontx2/otx2_cptvf_algs.c
index 2748a3327e39..620fa9b23e78 100644
--- a/drivers/crypto/marvell/octeontx2/otx2_cptvf_algs.c
+++ b/drivers/crypto/marvell/octeontx2/otx2_cptvf_algs.c
@@ -1650,7 +1650,7 @@  static inline int cpt_register_algs(void)
 
 	err = crypto_register_aeads(otx2_cpt_aeads,
 				    ARRAY_SIZE(otx2_cpt_aeads));
-	if (err) {
+	if (err && !IS_ENABLED(CONFIG_DM_CRYPT)) {
 		crypto_unregister_skciphers(otx2_cpt_skciphers,
 					    ARRAY_SIZE(otx2_cpt_skciphers));
 		return err;
@@ -1661,8 +1661,9 @@  static inline int cpt_register_algs(void)
 
 static inline void cpt_unregister_algs(void)
 {
-	crypto_unregister_skciphers(otx2_cpt_skciphers,
-				    ARRAY_SIZE(otx2_cpt_skciphers));
+	if (!IS_ENABLED(CONFIG_DM_CRYPT))
+		crypto_unregister_skciphers(otx2_cpt_skciphers,
+					    ARRAY_SIZE(otx2_cpt_skciphers));
 	crypto_unregister_aeads(otx2_cpt_aeads, ARRAY_SIZE(otx2_cpt_aeads));
 }