]>
Commit | Line | Data |
---|---|---|
b7ca0ba0 SL |
1 | From 12efba42e382567af2d4a1a76bbf5306599609c8 Mon Sep 17 00:00:00 2001 |
2 | From: Sasha Levin <sashal@kernel.org> | |
3 | Date: Mon, 9 Oct 2023 13:27:19 +0100 | |
4 | Subject: crypto: qat - fix double free during reset | |
5 | ||
6 | From: Svyatoslav Pankratov <svyatoslav.pankratov@intel.com> | |
7 | ||
8 | [ Upstream commit 01aed663e6c421aeafc9c330bda630976b50a764 ] | |
9 | ||
10 | There is no need to free the reset_data structure if the recovery is | |
11 | unsuccessful and the reset is synchronous. The function | |
12 | adf_dev_aer_schedule_reset() handles the cleanup properly. Only | |
13 | asynchronous resets require such structure to be freed inside the reset | |
14 | worker. | |
15 | ||
16 | Fixes: d8cba25d2c68 ("crypto: qat - Intel(R) QAT driver framework") | |
17 | Signed-off-by: Svyatoslav Pankratov <svyatoslav.pankratov@intel.com> | |
18 | Signed-off-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com> | |
19 | Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> | |
20 | Stable-dep-of: 7d42e097607c ("crypto: qat - resolve race condition during AER recovery") | |
21 | Signed-off-by: Sasha Levin <sashal@kernel.org> | |
22 | --- | |
23 | drivers/crypto/qat/qat_common/adf_aer.c | 3 ++- | |
24 | 1 file changed, 2 insertions(+), 1 deletion(-) | |
25 | ||
26 | diff --git a/drivers/crypto/qat/qat_common/adf_aer.c b/drivers/crypto/qat/qat_common/adf_aer.c | |
27 | index d2ae293d0df6a..d1a7809c51c0a 100644 | |
28 | --- a/drivers/crypto/qat/qat_common/adf_aer.c | |
29 | +++ b/drivers/crypto/qat/qat_common/adf_aer.c | |
30 | @@ -95,7 +95,8 @@ static void adf_device_reset_worker(struct work_struct *work) | |
31 | if (adf_dev_init(accel_dev) || adf_dev_start(accel_dev)) { | |
32 | /* The device hanged and we can't restart it so stop here */ | |
33 | dev_err(&GET_DEV(accel_dev), "Restart device failed\n"); | |
34 | - kfree(reset_data); | |
35 | + if (reset_data->mode == ADF_DEV_RESET_ASYNC) | |
36 | + kfree(reset_data); | |
37 | WARN(1, "QAT: device restart failed. Device is unusable\n"); | |
38 | return; | |
39 | } | |
40 | -- | |
41 | 2.43.0 | |
42 |