]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
crypto: qat - fix double free during reset
authorSvyatoslav Pankratov <svyatoslav.pankratov@intel.com>
Mon, 9 Oct 2023 12:27:19 +0000 (13:27 +0100)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 20 Oct 2023 05:39:25 +0000 (13:39 +0800)
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>
drivers/crypto/intel/qat/qat_common/adf_aer.c

index 04af32a2811c8f77b438a375fac184f63de48ed1..a39e70bd4b21bbc4ecd9180e194f8cf335ab167b 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;
        }