Author: cgutman
Date: Sat May 22 18:12:59 2010
New Revision: 47308
URL: http://svn.reactos.org/svn/reactos?rev=47308&view=rev
Log:
[NTOSKRNL]
- Print a warning instead of crashing when a driver provides a NULL pointer in the MajorFunction array
Modified:
trunk/reactos/ntoskrnl/io/iomgr/driver.c
Modified: trunk/reactos/ntoskrnl/io/iomgr/driver.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/iomgr/driver.c…
==============================================================================
--- trunk/reactos/ntoskrnl/io/iomgr/driver.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/io/iomgr/driver.c [iso-8859-1] Sat May 22 18:12:59 2010
@@ -1556,11 +1556,14 @@
* Doing so is illegal; drivers shouldn't touch entry points they
* do not implement.
*/
- ASSERT(DriverObject->MajorFunction[i] != NULL);
/* Check if it did so anyway */
- if (!DriverObject->MajorFunction[i])
+ if (!DriverObject->MajorFunction[i])
{
+ /* Print a warning in the debug log */
+ DPRINT1("Driver <%wZ> set DriverObject->MajorFunction[%d] to NULL!\n",
+ &DriverObject->DriverName, i);
+
/* Fix it up */
DriverObject->MajorFunction[i] = IopInvalidDeviceRequest;
}
Author: cgutman
Date: Sat May 22 18:03:25 2010
New Revision: 47307
URL: http://svn.reactos.org/svn/reactos?rev=47307&view=rev
Log:
[NTOSKRNL]
- Free the string buffer after the DPRINT1 that prints the contents of the string
- Fixes debug print corruption found by kmtest
Modified:
trunk/reactos/ntoskrnl/io/iomgr/driver.c
Modified: trunk/reactos/ntoskrnl/io/iomgr/driver.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/iomgr/driver.c…
==============================================================================
--- trunk/reactos/ntoskrnl/io/iomgr/driver.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/io/iomgr/driver.c [iso-8859-1] Sat May 22 18:03:25 2010
@@ -1171,16 +1171,17 @@
0,
(PVOID*)&DriverObject);
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT1("Can't locate driver object for %wZ\n", &ObjectName);
+ ExFreePool(ObjectName.Buffer);
+ return Status;
+ }
+
/*
* Free the buffer for driver object name
*/
ExFreePool(ObjectName.Buffer);
-
- if (!NT_SUCCESS(Status))
- {
- DPRINT1("Can't locate driver object for %wZ\n", &ObjectName);
- return Status;
- }
/* Check that driver is not already unloading */
if (DriverObject->Flags & DRVO_UNLOAD_INVOKED)