Message ID | 3ef09bf0c4adf7bc33f01f60cb8ce96e8f77b58c.1642786900.git.sthotton@marvell.com |
---|---|
State | Superseded |
Headers | show |
Series | [v2] crypto: octeontx2: fix NULL pointer dereference | expand |
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 --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)); }
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(-)