2018-03-12 13:32:38

by SF Markus Elfring

[permalink] [raw]
Subject: [PATCH 0/2] crypto/talitos: Adjustments for talitos_edesc_alloc()

From: Markus Elfring <[email protected]>
Date: Mon, 12 Mar 2018 14:24:34 +0100

Two update suggestions were taken into account
from static source code analysis.

Markus Elfring (2):
Use common error handling code
Delete an error message for a failed memory allocation

drivers/crypto/talitos.c | 25 ++++++++++++-------------
1 file changed, 12 insertions(+), 13 deletions(-)

--
2.16.2



2018-03-12 13:33:41

by SF Markus Elfring

[permalink] [raw]
Subject: [PATCH 1/2] crypto: talitos: Use common error handling code in talitos_edesc_alloc()

From: Markus Elfring <[email protected]>
Date: Mon, 12 Mar 2018 14:08:55 +0100

Add jump targets so that an error message and the setting of a specific
error code is stored only once at the end of this function.

Signed-off-by: Markus Elfring <[email protected]>
---
drivers/crypto/talitos.c | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c
index 6882fa2f8bad..a2271322db34 100644
--- a/drivers/crypto/talitos.c
+++ b/drivers/crypto/talitos.c
@@ -1352,29 +1352,24 @@ static struct talitos_edesc *talitos_edesc_alloc(struct device *dev,
if (!dst || dst == src) {
src_len = assoclen + cryptlen + authsize;
src_nents = sg_nents_for_len(src, src_len);
- if (src_nents < 0) {
- dev_err(dev, "Invalid number of src SG.\n");
- err = ERR_PTR(-EINVAL);
- goto error_sg;
- }
+ if (src_nents < 0)
+ goto report_failure;
+
src_nents = (src_nents == 1) ? 0 : src_nents;
dst_nents = dst ? src_nents : 0;
dst_len = 0;
} else { /* dst && dst != src*/
src_len = assoclen + cryptlen + (encrypt ? 0 : authsize);
src_nents = sg_nents_for_len(src, src_len);
- if (src_nents < 0) {
- dev_err(dev, "Invalid number of src SG.\n");
- err = ERR_PTR(-EINVAL);
- goto error_sg;
- }
+ if (src_nents < 0)
+ goto report_failure;
+
src_nents = (src_nents == 1) ? 0 : src_nents;
dst_len = assoclen + cryptlen + (encrypt ? authsize : 0);
dst_nents = sg_nents_for_len(dst, dst_len);
if (dst_nents < 0) {
dev_err(dev, "Invalid number of dst SG.\n");
- err = ERR_PTR(-EINVAL);
- goto error_sg;
+ goto set_error_code;
}
dst_nents = (dst_nents == 1) ? 0 : dst_nents;
}
@@ -1424,6 +1419,11 @@ static struct talitos_edesc *talitos_edesc_alloc(struct device *dev,
DMA_BIDIRECTIONAL);
}
return edesc;
+
+report_failure:
+ dev_err(dev, "Invalid number of src SG.\n");
+set_error_code:
+ err = ERR_PTR(-EINVAL);
error_sg:
if (iv_dma)
dma_unmap_single(dev, iv_dma, ivsize, DMA_TO_DEVICE);
--
2.16.2


2018-03-12 13:35:56

by SF Markus Elfring

[permalink] [raw]
Subject: [PATCH 2/2] crypto: talitos: Delete an error message for a failed memory allocation in talitos_edesc_alloc()

From: Markus Elfring <[email protected]>
Date: Mon, 12 Mar 2018 14:18:23 +0100

Omit an extra message for a memory allocation failure in this function.

This issue was detected by using the Coccinelle software.

Signed-off-by: Markus Elfring <[email protected]>
---
drivers/crypto/talitos.c | 1 -
1 file changed, 1 deletion(-)

diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c
index a2271322db34..4c7318981d28 100644
--- a/drivers/crypto/talitos.c
+++ b/drivers/crypto/talitos.c
@@ -1399,7 +1399,6 @@ static struct talitos_edesc *talitos_edesc_alloc(struct device *dev,

edesc = kmalloc(alloc_len, GFP_DMA | flags);
if (!edesc) {
- dev_err(dev, "could not allocate edescriptor\n");
err = ERR_PTR(-ENOMEM);
goto error_sg;
}
--
2.16.2


2018-03-12 14:14:31

by Christophe Leroy

[permalink] [raw]
Subject: Re: [PATCH 1/2] crypto: talitos: Use common error handling code in talitos_edesc_alloc()



Le 12/03/2018 à 14:31, SF Markus Elfring a écrit :
> From: Markus Elfring <[email protected]>
> Date: Mon, 12 Mar 2018 14:08:55 +0100
>
> Add jump targets so that an error message and the setting of a specific
> error code is stored only once at the end of this function.
>
> Signed-off-by: Markus Elfring <[email protected]>
> ---
> drivers/crypto/talitos.c | 24 ++++++++++++------------
> 1 file changed, 12 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c
> index 6882fa2f8bad..a2271322db34 100644
> --- a/drivers/crypto/talitos.c
> +++ b/drivers/crypto/talitos.c
> @@ -1352,29 +1352,24 @@ static struct talitos_edesc *talitos_edesc_alloc(struct device *dev,
> if (!dst || dst == src) {
> src_len = assoclen + cryptlen + authsize;
> src_nents = sg_nents_for_len(src, src_len);
> - if (src_nents < 0) {
> - dev_err(dev, "Invalid number of src SG.\n");

I don't think this is a good idea to move this dev_err(), just because
the text is identical twice.
The code is more clear when the text of the error is at the error.
Also, as this text is for the case where SRC SG is identical to DST SG,
the text could instead be "Invalid number of SG"

> - err = ERR_PTR(-EINVAL);
> - goto error_sg;
> - }
> + if (src_nents < 0)
> + goto report_failure;
> +
> src_nents = (src_nents == 1) ? 0 : src_nents;
> dst_nents = dst ? src_nents : 0;
> dst_len = 0;
> } else { /* dst && dst != src*/
> src_len = assoclen + cryptlen + (encrypt ? 0 : authsize);
> src_nents = sg_nents_for_len(src, src_len);
> - if (src_nents < 0) {
> - dev_err(dev, "Invalid number of src SG.\n");
> - err = ERR_PTR(-EINVAL);
> - goto error_sg;
> - }
> + if (src_nents < 0)
> + goto report_failure;
> +
> src_nents = (src_nents == 1) ? 0 : src_nents;
> dst_len = assoclen + cryptlen + (encrypt ? authsize : 0);
> dst_nents = sg_nents_for_len(dst, dst_len);
> if (dst_nents < 0) {
> dev_err(dev, "Invalid number of dst SG.\n");

To be consistant, this one should also go at the end if we want to be
consistant.

> - err = ERR_PTR(-EINVAL);
> - goto error_sg;
> + goto set_error_code;
> }
> dst_nents = (dst_nents == 1) ? 0 : dst_nents;
> }
> @@ -1424,6 +1419,11 @@ static struct talitos_edesc *talitos_edesc_alloc(struct device *dev,
> DMA_BIDIRECTIONAL);
> }
> return edesc;
> +
> +report_failure:
> + dev_err(dev, "Invalid number of src SG.\n");
> +set_error_code:
> + err = ERR_PTR(-EINVAL);
> error_sg:
> if (iv_dma)
> dma_unmap_single(dev, iv_dma, ivsize, DMA_TO_DEVICE);
>

Another solution could be to move the dma_map_single() of iv_dma after
the kmalloc(), in that case we could directly return from the other
error cases instead of having the unmap iv_dma first.

Christophe

2018-03-12 14:14:55

by Christophe Leroy

[permalink] [raw]
Subject: Re: [PATCH 2/2] crypto: talitos: Delete an error message for a failed memory allocation in talitos_edesc_alloc()



Le 12/03/2018 à 14:32, SF Markus Elfring a écrit :
> From: Markus Elfring <[email protected]>
> Date: Mon, 12 Mar 2018 14:18:23 +0100
>
> Omit an extra message for a memory allocation failure in this function.
>
> This issue was detected by using the Coccinelle software.
>
> Signed-off-by: Markus Elfring <[email protected]>

Reviewed-by: Christophe Leroy <[email protected]>

> ---
> drivers/crypto/talitos.c | 1 -
> 1 file changed, 1 deletion(-)
>
> diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c
> index a2271322db34..4c7318981d28 100644
> --- a/drivers/crypto/talitos.c
> +++ b/drivers/crypto/talitos.c
> @@ -1399,7 +1399,6 @@ static struct talitos_edesc *talitos_edesc_alloc(struct device *dev,
>
> edesc = kmalloc(alloc_len, GFP_DMA | flags);
> if (!edesc) {
> - dev_err(dev, "could not allocate edescriptor\n");
> err = ERR_PTR(-ENOMEM);
> goto error_sg;
> }
>

2018-03-23 15:59:46

by Herbert Xu

[permalink] [raw]
Subject: Re: [PATCH 2/2] crypto: talitos: Delete an error message for a failed memory allocation in talitos_edesc_alloc()

On Mon, Mar 12, 2018 at 02:32:58PM +0100, SF Markus Elfring wrote:
> From: Markus Elfring <[email protected]>
> Date: Mon, 12 Mar 2018 14:18:23 +0100
>
> Omit an extra message for a memory allocation failure in this function.
>
> This issue was detected by using the Coccinelle software.
>
> Signed-off-by: Markus Elfring <[email protected]>

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