From: Jason A. Donenfeld Date: Wed, 13 Apr 2022 23:50:38 +0000 (+0200) Subject: random: use memmove instead of memcpy for remaining 32 bytes X-Git-Tag: baikal/mips/sdk6.1~5971^2 X-Git-Url: https://git.baikalelectronics.ru/sdk/?a=commitdiff_plain;h=13a2fa4da1003c55aaef6bae5bd7e50315e628b6;p=kernel.git random: use memmove instead of memcpy for remaining 32 bytes In order to immediately overwrite the old key on the stack, before servicing a userspace request for bytes, we use the remaining 32 bytes of block 0 as the key. This means moving indices 8,9,a,b,c,d,e,f -> 4,5,6,7,8,9,a,b. Since 4 < 8, for the kernel implementations of memcpy(), this doesn't actually appear to be a problem in practice. But relying on that characteristic seems a bit brittle. So let's change that to a proper memmove(), which is the by-the-books way of handling overlapping memory copies. Reviewed-by: Dominik Brodowski Signed-off-by: Jason A. Donenfeld --- diff --git a/drivers/char/random.c b/drivers/char/random.c index 6b01b2be9dd49..3a293f919af97 100644 --- a/drivers/char/random.c +++ b/drivers/char/random.c @@ -333,7 +333,7 @@ static void crng_fast_key_erasure(u8 key[CHACHA_KEY_SIZE], chacha20_block(chacha_state, first_block); memcpy(key, first_block, CHACHA_KEY_SIZE); - memcpy(random_data, first_block + CHACHA_KEY_SIZE, random_data_len); + memmove(random_data, first_block + CHACHA_KEY_SIZE, random_data_len); memzero_explicit(first_block, sizeof(first_block)); }