https://git.reactos.org/?p=reactos.git;a=commitdiff;h=d18634c026eeba286699b35a1e10d58c0b0ba4bf

commit d18634c026eeba286699b35a1e10d58c0b0ba4bf
Author:     Jérôme Gardou <[email protected]>
AuthorDate: Thu Feb 18 10:24:53 2021 +0100
Commit:     Jérôme Gardou <[email protected]>
CommitDate: Thu Feb 18 10:24:53 2021 +0100

    [NTOS:WMI] Be consistent about potential NULL pointer use
---
 ntoskrnl/wmi/wmi.c | 21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/ntoskrnl/wmi/wmi.c b/ntoskrnl/wmi/wmi.c
index 7d6d2bb21a8..1b6a70e923f 100644
--- a/ntoskrnl/wmi/wmi.c
+++ b/ntoskrnl/wmi/wmi.c
@@ -108,21 +108,26 @@ NTSTATUS
 NTAPI
 IoWMIWriteEvent(_Inout_ PVOID WnodeEventItem)
 {
-    DPRINT1("IoWMIWriteEvent() called for WnodeEventItem %p (Flags = 0x%08lx), 
returning success\n",
-            WnodeEventItem, ((PWNODE_HEADER)WnodeEventItem)->Flags);
+    PWNODE_HEADER Header = WnodeEventItem;
 
-    if (((PWNODE_HEADER)WnodeEventItem)->Flags & WNODE_FLAG_TRACED_GUID)
+    if(!Header)
     {
-        DPRINT("IoWMIWriteEvent(): Flags has WNODE_FLAG_TRACED_GUID\n");
+        DPRINT1("Got NULL Item!\n");
+        return STATUS_INVALID_PARAMETER;
+    }
 
-        // Never free WnodeEventItem in this case.
+    DPRINT1("IoWMIWriteEvent() called for WnodeEventItem %p (Flags = 0x%08lx), 
returning success\n",
+            WnodeEventItem, Header->Flags);
 
+    if (Header->Flags & WNODE_FLAG_TRACED_GUID)
+    {
+        // Never free WnodeEventItem in this case.
+        DPRINT("IoWMIWriteEvent(): Flags has WNODE_FLAG_TRACED_GUID\n");
         return STATUS_SUCCESS;
     }
 
     /* Free the buffer if we are returning success */
-    if (WnodeEventItem != NULL)
-        ExFreePool(WnodeEventItem);
+    ExFreePool(WnodeEventItem);
 
     return STATUS_SUCCESS;
 }
@@ -402,7 +407,7 @@ WmiStartTrace(IN OUT PWMI_LOGGER_INFORMATION LoggerInfo)
     UNIMPLEMENTED;
     return STATUS_NOT_IMPLEMENTED;
 }
-    
+
 NTSTATUS
 NTAPI
 WmiStopTrace(IN PWMI_LOGGER_INFORMATION LoggerInfo)

Reply via email to