From e0df85c8191076f4540addcad98c4d76b3d33b0c Mon Sep 17 00:00:00 2001 From: Shell Date: Thu, 30 May 2024 20:09:02 +0800 Subject: [PATCH] dev: random should copy size bytes of data to buffer (#9012) --- components/drivers/misc/rt_random.c | 46 +++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/components/drivers/misc/rt_random.c b/components/drivers/misc/rt_random.c index 34d39943fa..da6b312e1e 100644 --- a/components/drivers/misc/rt_random.c +++ b/components/drivers/misc/rt_random.c @@ -21,9 +21,26 @@ static rt_uint16_t calc_random(void) static rt_ssize_t random_read(rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size) { - rt_uint16_t rand = calc_random(); - ssize_t ret = sizeof(rand); - rt_memcpy(buffer, &rand, ret); + rt_uint16_t rand; + ssize_t ret = 0; + while (size >= sizeof(rand)) + { + /* update rand */ + rand = calc_random(); + + *(rt_uint16_t *)buffer = rand; + buffer = (char *)buffer + sizeof(rand); + ret += sizeof(rand); + size -= sizeof(rand); + } + + if (size) + { + rand = calc_random(); + memcpy(buffer, &rand, size); + ret += size; + } + return ret; } @@ -95,9 +112,26 @@ static rt_uint16_t calc_urandom(void) static rt_ssize_t random_uread(rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size) { - rt_uint16_t rand = calc_urandom(); - ssize_t ret = sizeof(rand); - rt_memcpy(buffer, &rand, ret); + rt_uint16_t rand; + ssize_t ret = 0; + while (size >= sizeof(rand)) + { + /* update rand */ + rand = calc_urandom(); + + *(rt_uint16_t *)buffer = rand; + buffer = (char *)buffer + sizeof(rand); + ret += sizeof(rand); + size -= sizeof(rand); + } + + if (size) + { + rand = calc_urandom(); + memcpy(buffer, &rand, size); + ret += size; + } + return ret; }