diff --git a/subsys/random/rand32_entropy_device.c b/subsys/random/rand32_entropy_device.c index d958710b2a1..873d8c9e90d 100644 --- a/subsys/random/rand32_entropy_device.c +++ b/subsys/random/rand32_entropy_device.c @@ -85,16 +85,15 @@ static int rand_get(uint8_t *dst, size_t outlen, bool csrand) uint32_t blocksize = 4; while (len < outlen) { - random_num = k_cycle_get_32(); - if ((outlen-len) < sizeof(random_num)) { - blocksize = len; - (void)memcpy(&(dst[random_num]), - &random_num, blocksize); - } else { - *((uint32_t *)&dst[len]) = random_num; + size_t copylen = outlen - len; + + if (copylen > blocksize) { + copylen = blocksize; } - len += blocksize; + random_num = k_cycle_get_32(); + (void)memcpy(&(dst[len]), &random_num, copylen); + len += copylen; } }