Преглед на файлове

LibC: Use u32 in arc4random instead of char[4]

There's no alignment requirements on a char[4] buffer, so this was
causing unaligned reads that were caught by UBSAN.
Andrew Kaster преди 4 години
родител
ревизия
74da0f24f0
променени са 1 файла, в които са добавени 3 реда и са изтрити 3 реда
  1. 3 3
      Userland/Libraries/LibC/stdlib.cpp

+ 3 - 3
Userland/Libraries/LibC/stdlib.cpp

@@ -1080,9 +1080,9 @@ unsigned long long strtoull(const char* str, char** endptr, int base)
 // TODO: In the future, rand can be made deterministic and this not.
 // TODO: In the future, rand can be made deterministic and this not.
 uint32_t arc4random(void)
 uint32_t arc4random(void)
 {
 {
-    char buf[4];
-    syscall(SC_getrandom, buf, 4, 0);
-    return *(uint32_t*)buf;
+    uint32_t buf;
+    syscall(SC_getrandom, &buf, sizeof(buf), 0);
+    return buf;
 }
 }
 
 
 void arc4random_buf(void* buffer, size_t buffer_size)
 void arc4random_buf(void* buffer, size_t buffer_size)