--- wpa_supplicant-2.9/src/utils/os_unix.c.bak 2019-08-07 15:25:25.000000000 +0200 +++ wpa_supplicant-2.9/src/utils/os_unix.c 2021-03-04 12:02:39.637732041 +0100 @@ -10,6 +10,8 @@ #include #include +#include +#include #ifdef ANDROID #include @@ -257,22 +259,30 @@ int os_get_random(unsigned char *buf, si buf[i] = i & 0xff; return 0; #else /* TEST_FUZZ */ - FILE *f; - size_t rc; + ssize_t written; + uint8_t *p = buf; if (TEST_FAIL()) return -1; - f = fopen("/dev/urandom", "rb"); - if (f == NULL) { - printf("Could not open /dev/urandom.\n"); - return -1; + if (len > INT_MAX) { + fprintf(stderr, "os_get_random: requested %zu bytes\n", len); + _exit(1); } - - rc = fread(buf, 1, len, f); - fclose(f); - - return rc != len ? -1 : 0; + while (len > 0) { + do { + errno = 0; + written = getrandom(p, len, 0); + } while ((written == -1) && (errno == EINTR)); + if (written <= 0) { + fprintf(stderr, "os_get_random: getrandom failed: %s\n", + strerror(errno)); + _exit(1); + } + p += written; + len -= written; + } + return 0; #endif /* TEST_FUZZ */ }