Skip to content

Commit d776876

Browse files
aescolarnashif
authored andcommitted
drivers: entropy: fix native_posix driver for more than 3 byte requests
Fix the native_posix fake entropy driver for more than 3 byte requests, and specially for native_sim//64 builds. The host random() provides a number between 0 and 2**31-1 (INT_MAX), so bit 32 was always 0. So when filling a buffer with more than 3 bytes we would be filling each 4th byte with a byte which always had its MSbit as 0. For LP64 native_sim//64 builds, this was even worse, as the driver had another bug where we assumed random() returned the whole long filled, and therefore all 4 upper bytes would be 0. Signed-off-by: Alberto Escolar Piedras <[email protected]> (cherry picked from commit b3407f0)
1 parent 78f87d5 commit d776876

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

drivers/entropy/fake_entropy_native_posix.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,10 @@ static int entropy_native_posix_get_entropy(const struct device *dev,
4141
*/
4242
long value = nsi_host_random();
4343

44-
size_t to_copy = MIN(length, sizeof(long int));
44+
/* The host random() provides a number between 0 and 2**31-1. Bit 32 is always 0.
45+
* So let's just use the lower 3 bytes discarding the upper 7 bits
46+
*/
47+
size_t to_copy = MIN(length, 3);
4548

4649
memcpy(buffer, &value, to_copy);
4750
buffer += to_copy;

0 commit comments

Comments
 (0)