crypto: qat - fix double free during reset
authorSvyatoslav Pankratov <svyatoslav.pankratov@intel.com>
Mon, 9 Oct 2023 12:27:19 +0000 (13:27 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 10 Jan 2024 16:16:55 +0000 (17:16 +0100)
[ Upstream commit 01aed663e6c421aeafc9c330bda630976b50a764 ]

There is no need to free the reset_data structure if the recovery is
unsuccessful and the reset is synchronous. The function
adf_dev_aer_schedule_reset() handles the cleanup properly. Only
asynchronous resets require such structure to be freed inside the reset
worker.

Fixes: d8cba25d2c68 ("crypto: qat - Intel(R) QAT driver framework")
Signed-off-by: Svyatoslav Pankratov <svyatoslav.pankratov@intel.com>
Signed-off-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/crypto/intel/qat/qat_common/adf_aer.c

index 04af32a..a39e70b 100644 (file)
@@ -92,7 +92,8 @@ static void adf_device_reset_worker(struct work_struct *work)
        if (adf_dev_restart(accel_dev)) {
                /* The device hanged and we can't restart it so stop here */
                dev_err(&GET_DEV(accel_dev), "Restart device failed\n");
-               kfree(reset_data);
+               if (reset_data->mode == ADF_DEV_RESET_ASYNC)
+                       kfree(reset_data);
                WARN(1, "QAT: device restart failed. Device is unusable\n");
                return;
        }