[NTOS:EX]
authorThomas Faber <thomas.faber@reactos.org>
Sat, 29 Aug 2015 07:35:59 +0000 (07:35 +0000)
committerThomas Faber <thomas.faber@reactos.org>
Sat, 29 Aug 2015 07:35:59 +0000 (07:35 +0000)
- Remove superfluous dereference in NtCreateProfile
- Allocate the right size for KPROFILE object
- Don't leak the KPROFILE when deleting an EPROFILE
- Avoid some casts
CORE-10066

svn path=/trunk/; revision=68852

reactos/ntoskrnl/ex/profile.c

index 24daa39..20a6c88 100644 (file)
@@ -42,7 +42,7 @@ ExpDeleteProfile(PVOID ObjectBody)
     ULONG State;
 
     /* Typecast the Object */
-    Profile = (PEPROFILE)ObjectBody;
+    Profile = ObjectBody;
 
     /* Check if there if the Profile was started */
     if (Profile->LockedBufferAddress)
@@ -55,6 +55,7 @@ ExpDeleteProfile(PVOID ObjectBody)
         MmUnmapLockedPages(Profile->LockedBufferAddress, Profile->Mdl);
         MmUnlockPages(Profile->Mdl);
         IoFreeMdl(Profile->Mdl);
+        ExFreePoolWithTag(Profile->ProfileObject, TAG_PROFILE);
     }
 
     /* Check if a Process is associated and reference it */
@@ -247,7 +248,6 @@ NtCreateProfile(OUT PHANDLE ProfileHandle,
                              0,
                              NULL,
                              &hProfile);
-    ObDereferenceObject(Profile);
 
     /* Check for Success */
     if (!NT_SUCCESS(Status))
@@ -361,7 +361,7 @@ NtStartProfile(IN HANDLE ProfileHandle)
 
     /* Allocate a Kernel Profile Object. */
     ProfileObject = ExAllocatePoolWithTag(NonPagedPool,
-                                          sizeof(EPROFILE),
+                                          sizeof(*ProfileObject),
                                           TAG_PROFILE);
     if (!ProfileObject)
     {
@@ -396,7 +396,7 @@ NtStartProfile(IN HANDLE ProfileHandle)
     /* Initialize the Kernel Profile Object */
     Profile->ProfileObject = ProfileObject;
     KeInitializeProfile(ProfileObject,
-                        (PKPROCESS)Profile->Process,
+                        &Profile->Process->Pcb,
                         Profile->RangeBase,
                         Profile->RangeSize,
                         Profile->BucketSize,