2014-06-23 16:41:12

by Jussi Kivilinna

[permalink] [raw]
Subject: [PATCH] crypto: sha512_ssse3: fix byte count to bit count conversion

Byte-to-bit-count computation is only partly converted to big-endian and is
mixing in CPU-endian values. Problem was noticed by sparce with warning:

CHECK arch/x86/crypto/sha512_ssse3_glue.c
arch/x86/crypto/sha512_ssse3_glue.c:144:19: warning: restricted __be64 degrades to integer
arch/x86/crypto/sha512_ssse3_glue.c:144:17: warning: incorrect type in assignment (different base types)
arch/x86/crypto/sha512_ssse3_glue.c:144:17: expected restricted __be64 <noident>
arch/x86/crypto/sha512_ssse3_glue.c:144:17: got unsigned long long

Cc: Tim Chen <[email protected]>
Signed-off-by: Jussi Kivilinna <[email protected]>
---
arch/x86/crypto/sha512_ssse3_glue.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/crypto/sha512_ssse3_glue.c b/arch/x86/crypto/sha512_ssse3_glue.c
index f30cd10..8626b03 100644
--- a/arch/x86/crypto/sha512_ssse3_glue.c
+++ b/arch/x86/crypto/sha512_ssse3_glue.c
@@ -141,7 +141,7 @@ static int sha512_ssse3_final(struct shash_desc *desc, u8 *out)

/* save number of bits */
bits[1] = cpu_to_be64(sctx->count[0] << 3);
- bits[0] = cpu_to_be64(sctx->count[1] << 3) | sctx->count[0] >> 61;
+ bits[0] = cpu_to_be64(sctx->count[1] << 3 | sctx->count[0] >> 61);

/* Pad out to 112 mod 128 and append length */
index = sctx->count[0] & 0x7f;


2014-06-23 16:59:21

by Tim Chen

[permalink] [raw]
Subject: Re: [PATCH] crypto: sha512_ssse3: fix byte count to bit count conversion

Thanks for catching this.

Should propagate this patch to stable kernels 3.14, 3.12 and 3.10 too.

Acked-by: Tim Chen <[email protected]>

On Mon, 2014-06-23 at 19:41 +0300, Jussi Kivilinna wrote:
> Byte-to-bit-count computation is only partly converted to big-endian and is
> mixing in CPU-endian values. Problem was noticed by sparce with warning:
>
> CHECK arch/x86/crypto/sha512_ssse3_glue.c
> arch/x86/crypto/sha512_ssse3_glue.c:144:19: warning: restricted __be64 degrades to integer
> arch/x86/crypto/sha512_ssse3_glue.c:144:17: warning: incorrect type in assignment (different base types)
> arch/x86/crypto/sha512_ssse3_glue.c:144:17: expected restricted __be64 <noident>
> arch/x86/crypto/sha512_ssse3_glue.c:144:17: got unsigned long long
>
> Cc: Tim Chen <[email protected]>
> Signed-off-by: Jussi Kivilinna <[email protected]>
> ---
> arch/x86/crypto/sha512_ssse3_glue.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/x86/crypto/sha512_ssse3_glue.c b/arch/x86/crypto/sha512_ssse3_glue.c
> index f30cd10..8626b03 100644
> --- a/arch/x86/crypto/sha512_ssse3_glue.c
> +++ b/arch/x86/crypto/sha512_ssse3_glue.c
> @@ -141,7 +141,7 @@ static int sha512_ssse3_final(struct shash_desc *desc, u8 *out)
>
> /* save number of bits */
> bits[1] = cpu_to_be64(sctx->count[0] << 3);
> - bits[0] = cpu_to_be64(sctx->count[1] << 3) | sctx->count[0] >> 61;
> + bits[0] = cpu_to_be64(sctx->count[1] << 3 | sctx->count[0] >> 61);
>
> /* Pad out to 112 mod 128 and append length */
> index = sctx->count[0] & 0x7f;
>

2014-06-25 13:56:16

by Herbert Xu

[permalink] [raw]
Subject: Re: [PATCH] crypto: sha512_ssse3: fix byte count to bit count conversion

On Mon, Jun 23, 2014 at 07:41:05PM +0300, Jussi Kivilinna wrote:
> Byte-to-bit-count computation is only partly converted to big-endian and is
> mixing in CPU-endian values. Problem was noticed by sparce with warning:
>
> CHECK arch/x86/crypto/sha512_ssse3_glue.c
> arch/x86/crypto/sha512_ssse3_glue.c:144:19: warning: restricted __be64 degrades to integer
> arch/x86/crypto/sha512_ssse3_glue.c:144:17: warning: incorrect type in assignment (different base types)
> arch/x86/crypto/sha512_ssse3_glue.c:144:17: expected restricted __be64 <noident>
> arch/x86/crypto/sha512_ssse3_glue.c:144:17: got unsigned long long
>
> Cc: Tim Chen <[email protected]>
> Signed-off-by: Jussi Kivilinna <[email protected]>

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