2016-02-10 23:03:54

by Tadeusz Struk

[permalink] [raw]
Subject: [PATCH] crypto: qat - fix leak on error path

Fix a leak on error path in qat asym

Reported-by: Salvatore Benedetto <[email protected]>
Signed-off-by: Tadeusz Struk <[email protected]>
---
drivers/crypto/qat/qat_common/qat_asym_algs.c | 70 ++++++++++++++-------------
1 file changed, 36 insertions(+), 34 deletions(-)

diff --git a/drivers/crypto/qat/qat_common/qat_asym_algs.c b/drivers/crypto/qat/qat_common/qat_asym_algs.c
index 51c594f..e5c0727 100644
--- a/drivers/crypto/qat/qat_common/qat_asym_algs.c
+++ b/drivers/crypto/qat/qat_common/qat_asym_algs.c
@@ -340,14 +340,16 @@ static int qat_rsa_enc(struct akcipher_request *req)

if (!ret)
return -EINPROGRESS;
-unmap_src:
- if (qat_req->src_align)
- dma_free_coherent(dev, ctx->key_sz, qat_req->src_align,
- qat_req->in.enc.m);
- else
- if (!dma_mapping_error(dev, qat_req->in.enc.m))
- dma_unmap_single(dev, qat_req->in.enc.m, ctx->key_sz,
- DMA_TO_DEVICE);
+
+ if (!dma_mapping_error(dev, qat_req->phy_out))
+ dma_unmap_single(dev, qat_req->phy_out,
+ sizeof(struct qat_rsa_output_params),
+ DMA_TO_DEVICE);
+unmap_in_params:
+ if (!dma_mapping_error(dev, qat_req->phy_in))
+ dma_unmap_single(dev, qat_req->phy_in,
+ sizeof(struct qat_rsa_input_params),
+ DMA_TO_DEVICE);
unmap_dst:
if (qat_req->dst_align)
dma_free_coherent(dev, ctx->key_sz, qat_req->dst_align,
@@ -356,15 +358,14 @@ unmap_dst:
if (!dma_mapping_error(dev, qat_req->out.enc.c))
dma_unmap_single(dev, qat_req->out.enc.c, ctx->key_sz,
DMA_FROM_DEVICE);
-unmap_in_params:
- if (!dma_mapping_error(dev, qat_req->phy_in))
- dma_unmap_single(dev, qat_req->phy_in,
- sizeof(struct qat_rsa_input_params),
- DMA_TO_DEVICE);
- if (!dma_mapping_error(dev, qat_req->phy_out))
- dma_unmap_single(dev, qat_req->phy_out,
- sizeof(struct qat_rsa_output_params),
- DMA_TO_DEVICE);
+unmap_src:
+ if (qat_req->src_align)
+ dma_free_coherent(dev, ctx->key_sz, qat_req->src_align,
+ qat_req->in.enc.m);
+ else
+ if (!dma_mapping_error(dev, qat_req->in.enc.m))
+ dma_unmap_single(dev, qat_req->in.enc.m, ctx->key_sz,
+ DMA_TO_DEVICE);
return ret;
}

@@ -472,14 +473,16 @@ static int qat_rsa_dec(struct akcipher_request *req)

if (!ret)
return -EINPROGRESS;
-unmap_src:
- if (qat_req->src_align)
- dma_free_coherent(dev, ctx->key_sz, qat_req->src_align,
- qat_req->in.dec.c);
- else
- if (!dma_mapping_error(dev, qat_req->in.dec.c))
- dma_unmap_single(dev, qat_req->in.dec.c, ctx->key_sz,
- DMA_TO_DEVICE);
+
+ if (!dma_mapping_error(dev, qat_req->phy_out))
+ dma_unmap_single(dev, qat_req->phy_out,
+ sizeof(struct qat_rsa_output_params),
+ DMA_TO_DEVICE);
+unmap_in_params:
+ if (!dma_mapping_error(dev, qat_req->phy_in))
+ dma_unmap_single(dev, qat_req->phy_in,
+ sizeof(struct qat_rsa_input_params),
+ DMA_TO_DEVICE);
unmap_dst:
if (qat_req->dst_align)
dma_free_coherent(dev, ctx->key_sz, qat_req->dst_align,
@@ -488,15 +491,14 @@ unmap_dst:
if (!dma_mapping_error(dev, qat_req->out.dec.m))
dma_unmap_single(dev, qat_req->out.dec.m, ctx->key_sz,
DMA_FROM_DEVICE);
-unmap_in_params:
- if (!dma_mapping_error(dev, qat_req->phy_in))
- dma_unmap_single(dev, qat_req->phy_in,
- sizeof(struct qat_rsa_input_params),
- DMA_TO_DEVICE);
- if (!dma_mapping_error(dev, qat_req->phy_out))
- dma_unmap_single(dev, qat_req->phy_out,
- sizeof(struct qat_rsa_output_params),
- DMA_TO_DEVICE);
+unmap_src:
+ if (qat_req->src_align)
+ dma_free_coherent(dev, ctx->key_sz, qat_req->src_align,
+ qat_req->in.dec.c);
+ else
+ if (!dma_mapping_error(dev, qat_req->in.dec.c))
+ dma_unmap_single(dev, qat_req->in.dec.c, ctx->key_sz,
+ DMA_TO_DEVICE);
return ret;
}

--
2.1.4


2016-02-16 20:20:49

by Herbert Xu

[permalink] [raw]
Subject: Re: [PATCH] crypto: qat - fix leak on error path

On Wed, Feb 10, 2016 at 02:59:44PM -0800, Tadeusz Struk wrote:
> Fix a leak on error path in qat asym
>
> Reported-by: Salvatore Benedetto <[email protected]>
> Signed-off-by: Tadeusz Struk <[email protected]>

Appiled.
--
Email: Herbert Xu <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

2016-02-16 20:27:28

by Tadeusz Struk

[permalink] [raw]
Subject: Re: [PATCH] crypto: qat - fix leak on error path

On 02/16/2016 12:20 PM, Herbert Xu wrote:
> On Wed, Feb 10, 2016 at 02:59:44PM -0800, Tadeusz Struk wrote:
>> > Fix a leak on error path in qat asym
>> >
>> > Reported-by: Salvatore Benedetto <[email protected]>
>> > Signed-off-by: Tadeusz Struk <[email protected]>
> Appiled.

Thanks Herbert, should we also push it to stable?
Thanks,
--
TS

2016-02-17 07:46:47

by Herbert Xu

[permalink] [raw]
Subject: Re: [PATCH] crypto: qat - fix leak on error path

On Tue, Feb 16, 2016 at 12:23:19PM -0800, Tadeusz Struk wrote:
> On 02/16/2016 12:20 PM, Herbert Xu wrote:
> > On Wed, Feb 10, 2016 at 02:59:44PM -0800, Tadeusz Struk wrote:
> >> > Fix a leak on error path in qat asym
> >> >
> >> > Reported-by: Salvatore Benedetto <[email protected]>
> >> > Signed-off-by: Tadeusz Struk <[email protected]>
> > Appiled.
>
> Thanks Herbert, should we also push it to stable?

I don't think it is serious enough to warrant going in immediately.
We can push it once the next merge window opens up.

Cheers,
--
Email: Herbert Xu <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt