[VIDEOPRT]
authorThomas Faber <thomas.faber@reactos.org>
Thu, 18 May 2017 21:29:24 +0000 (21:29 +0000)
committerThomas Faber <thomas.faber@reactos.org>
Thu, 18 May 2017 21:29:24 +0000 (21:29 +0000)
- Guard Ke386CallBios calls against concurrent execution.
CORE-13214

svn path=/trunk/; revision=74581

reactos/win32ss/drivers/videoprt/int10.c
reactos/win32ss/drivers/videoprt/videoprt.c
reactos/win32ss/drivers/videoprt/videoprt.h

index 14ed492..0893db7 100644 (file)
@@ -296,7 +296,9 @@ IntInt10CallBios(
     BiosContext.SegEs = BiosArguments->SegEs;
 
     /* Do the ROM BIOS call */
+    (void)KeWaitForMutexObject(&VideoPortInt10Mutex, Executive, KernelMode, FALSE, NULL);
     Status = Ke386CallBios(0x10, &BiosContext);
+    KeReleaseMutex(&VideoPortInt10Mutex, FALSE);
 
     /* Return the arguments */
     BiosArguments->Eax = BiosContext.Eax;
@@ -354,7 +356,9 @@ VideoPortInt10(
     BiosContext.Ebp = BiosArguments->Ebp;
 
     /* Do the ROM BIOS call */
+    (void)KeWaitForMutexObject(&VideoPortInt10Mutex, Executive, KernelMode, FALSE, NULL);
     Status = Ke386CallBios(0x10, &BiosContext);
+    KeReleaseMutex(&VideoPortInt10Mutex, FALSE);
 
     /* Return the arguments */
     BiosArguments->Eax = BiosContext.Eax;
index 2c0cbee..9bfb2a2 100644 (file)
@@ -33,6 +33,7 @@
 ULONG CsrssInitialized = FALSE;
 PKPROCESS Csrss = NULL;
 ULONG VideoPortDeviceNumber = 0;
+KMUTEX VideoPortInt10Mutex;
 
 /* PRIVATE FUNCTIONS **********************************************************/
 
@@ -464,9 +465,16 @@ VideoPortInitialize(
     NTSTATUS Status;
     PVIDEO_PORT_DRIVER_EXTENSION DriverExtension;
     BOOLEAN PnpDriver = FALSE, LegacyDetection = FALSE;
+    static BOOLEAN Int10MutexInitialized;
 
     TRACE_(VIDEOPRT, "VideoPortInitialize\n");
 
+    if (!Int10MutexInitialized)
+    {
+        KeInitializeMutex(&VideoPortInt10Mutex, 0);
+        Int10MutexInitialized = TRUE;
+    }
+
     /* As a first thing do parameter checks. */
     if (HwInitializationData->HwInitDataSize > sizeof(VIDEO_HW_INITIALIZATION_DATA))
     {
index eb0e4cb..3490e56 100644 (file)
@@ -247,6 +247,7 @@ IntVideoPortMapPhysicalMemory(
 extern ULONG CsrssInitialized;
 extern PKPROCESS Csrss;
 extern ULONG VideoPortDeviceNumber;
+extern KMUTEX VideoPortInt10Mutex;
 
 VOID FASTCALL
 IntAttachToCSRSS(PKPROCESS *CallingProcess, PKAPC_STATE ApcState);