From: Paul Gofman <pgofman@codeweavers.com> --- dlls/ntdll/unix/system.c | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/dlls/ntdll/unix/system.c b/dlls/ntdll/unix/system.c index 350bcea4f86..08774d79de7 100644 --- a/dlls/ntdll/unix/system.c +++ b/dlls/ntdll/unix/system.c @@ -3024,6 +3024,22 @@ static void read_dev_urandom( void *buf, ULONG len ) else WARN( "can't open /dev/urandom\n" ); } +static void get_random( void *buf, ULONG len ) +{ +#ifdef HAVE_GETRANDOM + int ret; + do + { + ret = getrandom( buf, len, 0 ); + } + while (ret == -1 && errno == EINTR); + + if (ret == -1 && errno == ENOSYS) read_dev_urandom( buf, len ); +#else + read_dev_urandom( buf, len ); +#endif +} + static unsigned int get_system_process_info( SYSTEM_INFORMATION_CLASS class, void *info, ULONG size, ULONG *len ) { unsigned int process_count, total_thread_count, total_name_len, i, j; @@ -3488,21 +3504,7 @@ NTSTATUS WINAPI NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS class, if (size >= len) { if (!info) ret = STATUS_ACCESS_VIOLATION; - else - { -#ifdef HAVE_GETRANDOM - int ret; - do - { - ret = getrandom( info, len, 0 ); - } - while (ret == -1 && errno == EINTR); - - if (ret == -1 && errno == ENOSYS) read_dev_urandom( info, len ); -#else - read_dev_urandom( info, len ); -#endif - } + else get_random( info, len ); } else ret = STATUS_INFO_LENGTH_MISMATCH; break; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9926