summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorSvyatoslav Pankratov <svyatoslav.pankratov@intel.com>2023-10-09 15:27:19 +0300
committerHerbert Xu <herbert@gondor.apana.org.au>2023-10-20 08:39:25 +0300
commit01aed663e6c421aeafc9c330bda630976b50a764 (patch)
treed618a0c98fd25d3a2a0f41102d4f1db189ec42c7 /drivers
parentfdcac2ddc759752cb4886138d89a8c06bf5086a7 (diff)
downloadlinux-01aed663e6c421aeafc9c330bda630976b50a764.tar.xz
crypto: qat - fix double free during reset
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>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/crypto/intel/qat/qat_common/adf_aer.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/crypto/intel/qat/qat_common/adf_aer.c b/drivers/crypto/intel/qat/qat_common/adf_aer.c
index 04af32a2811c..a39e70bd4b21 100644
--- a/drivers/crypto/intel/qat/qat_common/adf_aer.c
+++ b/drivers/crypto/intel/qat/qat_common/adf_aer.c
@@ -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;
}