diff options
author | Eric Biggers <ebiggers@google.com> | 2017-11-22 11:51:39 -0800 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2017-11-29 17:33:33 +1100 |
commit | 49b79ef83e36c996759ef5ca4df9eda80d8d549e (patch) | |
tree | cb511e3651e6ff0a3445d10cdbbe48fc6ae6d7d9 /crypto | |
parent | 6c76177611511a8be879eb44cd801c994eb3a717 (diff) | |
download | linux-crypto-49b79ef83e36c996759ef5ca4df9eda80d8d549e.tar.gz linux-crypto-49b79ef83e36c996759ef5ca4df9eda80d8d549e.zip |
crypto: chacha20 - Fix keystream alignment for chacha20_block()
When chacha20_block() outputs the keystream block, it uses 'u32' stores
directly. However, the callers (crypto/chacha20_generic.c and
drivers/char/random.c) declare the keystream buffer as a 'u8' array,
which is not guaranteed to have the needed alignment.
Fix it by having both callers declare the keystream as a 'u32' array.
For now this is preferable to switching over to the unaligned access
macros because chacha20_block() is only being used in cases where we can
easily control the alignment (stack buffers).
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/chacha20_generic.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/crypto/chacha20_generic.c b/crypto/chacha20_generic.c index bb4affbd..e451c3cb 100644 --- a/crypto/chacha20_generic.c +++ b/crypto/chacha20_generic.c @@ -18,20 +18,20 @@ static void chacha20_docrypt(u32 *state, u8 *dst, const u8 *src, unsigned int bytes) { - u8 stream[CHACHA20_BLOCK_SIZE]; + u32 stream[CHACHA20_BLOCK_WORDS]; if (dst != src) memcpy(dst, src, bytes); while (bytes >= CHACHA20_BLOCK_SIZE) { chacha20_block(state, stream); - crypto_xor(dst, stream, CHACHA20_BLOCK_SIZE); + crypto_xor(dst, (const u8 *)stream, CHACHA20_BLOCK_SIZE); bytes -= CHACHA20_BLOCK_SIZE; dst += CHACHA20_BLOCK_SIZE; } if (bytes) { chacha20_block(state, stream); - crypto_xor(dst, stream, bytes); + crypto_xor(dst, (const u8 *)stream, bytes); } } |