Rebase against bc282905d9491b9f9fe4ae4b69a8ccdf99c5aaa8.

This commit is contained in:
Zebediah Figura
2020-06-23 18:07:36 -05:00
parent 8402c95961
commit 7766c17912
36 changed files with 524 additions and 1918 deletions

View File

@@ -1,39 +1,38 @@
From e42cdb8305dcebca77afba4a56e59391f2cb4a38 Mon Sep 17 00:00:00 2001
From 0cb2647baa3ea72babb05e24d2f1fa23cdedb0a1 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Thu, 7 Jan 2016 06:01:01 +0100
Subject: ntdll: Return buffer filled with random values from
Subject: [PATCH] ntdll: Return buffer filled with random values from
SystemInterruptInformation.
---
dlls/ntdll/nt.c | 11 +++++++++++
1 file changed, 11 insertions(+)
dlls/ntdll/unix/system.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c
index 9ee1923..fe3e8e8 100644
--- a/dlls/ntdll/nt.c
+++ b/dlls/ntdll/nt.c
@@ -2070,10 +2070,21 @@ NTSTATUS WINAPI NtQuerySystemInformation(
diff --git a/dlls/ntdll/unix/system.c b/dlls/ntdll/unix/system.c
index 68de16b7e5b..5ba9fb41156 100644
--- a/dlls/ntdll/unix/system.c
+++ b/dlls/ntdll/unix/system.c
@@ -2003,8 +2003,20 @@ NTSTATUS WINAPI NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS class,
case SystemInterruptInformation:
{
SYSTEM_INTERRUPT_INFORMATION sii;
+ int dev_random;
{
SYSTEM_INTERRUPT_INFORMATION sii = {{ 0 }};
+ int dev_random;
memset(&sii, 0, sizeof(sii));
len = sizeof(sii);
+ /* Some applications use the returned buffer for random number
+ * generation. Its unlikely that an app depends on the exact
+ * layout, so just fill with values from /dev/urandom. */
+ dev_random = open( "/dev/urandom", O_RDONLY );
+ if (dev_random != -1)
+ {
+ read( dev_random, &sii, sizeof(sii) );
+ close( dev_random );
+ }
len = sizeof(sii);
+
if ( Length >= len)
{
if (!SystemInformation) ret = STATUS_ACCESS_VIOLATION;
+ /* Some applications use the returned buffer for random number
+ * generation. Its unlikely that an app depends on the exact
+ * layout, so just fill with values from /dev/urandom. */
+ dev_random = open( "/dev/urandom", O_RDONLY );
+ if (dev_random != -1)
+ {
+ read( dev_random, &sii, sizeof(sii) );
+ close( dev_random );
+ }
+
if (size >= len)
{
if (!info) ret = STATUS_ACCESS_VIOLATION;
--
2.6.4
2.27.0