Author: jgardou
Date: Mon Nov  3 09:52:08 2014
New Revision: 65210

URL: http://svn.reactos.org/svn/reactos?rev=65210&view=rev
Log:
[NTOS/PS]
 - Do not leak a reference to the process object when setting quotas.

Modified:
    trunk/reactos/ntoskrnl/include/internal/ps.h
    trunk/reactos/ntoskrnl/ps/query.c
    trunk/reactos/ntoskrnl/ps/quota.c

Modified: trunk/reactos/ntoskrnl/include/internal/ps.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/include/internal/ps.h?rev=65210&r1=65209&r2=65210&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/include/internal/ps.h        [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/include/internal/ps.h        [iso-8859-1] Mon Nov  3 
09:52:08 2014
@@ -303,7 +303,7 @@
 NTSTATUS
 NTAPI
 PspSetQuotaLimits(
-    _In_ HANDLE ProcessHandle,
+    _In_ PEPROCESS Process,
     _In_ ULONG Unused,
     _In_ PVOID QuotaLimits,
     _In_ ULONG QuotaLimitsLength,

Modified: trunk/reactos/ntoskrnl/ps/query.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ps/query.c?rev=65210&r1=65209&r2=65210&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ps/query.c   [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ps/query.c   [iso-8859-1] Mon Nov  3 09:52:08 2014
@@ -1528,6 +1528,7 @@
             /* Validate the number */
             if ((BasePriority > HIGH_PRIORITY) || (BasePriority <= 
LOW_PRIORITY))
             {
+                ObDereferenceObject(Process);
                 return STATUS_INVALID_PARAMETER;
             }
 
@@ -1918,11 +1919,12 @@
 
         case ProcessQuotaLimits:
 
-            return PspSetQuotaLimits(ProcessHandle,
+            Status = PspSetQuotaLimits(Process,
                                      1,
                                      ProcessInformation,
                                      ProcessInformationLength,
                                      PreviousMode);
+            break;
 
         case ProcessWorkingSetWatch:
             DPRINT1("WS watch not implemented\n");

Modified: trunk/reactos/ntoskrnl/ps/quota.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ps/quota.c?rev=65210&r1=65209&r2=65210&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ps/quota.c   [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ps/quota.c   [iso-8859-1] Mon Nov  3 09:52:08 2014
@@ -292,14 +292,13 @@
 NTSTATUS
 NTAPI
 PspSetQuotaLimits(
-    _In_ HANDLE ProcessHandle,
+    _In_ PEPROCESS Process,
     _In_ ULONG Unused,
     _In_ PVOID QuotaLimits,
     _In_ ULONG QuotaLimitsLength,
     _In_ KPROCESSOR_MODE PreviousMode)
 {
     QUOTA_LIMITS_EX CapturedQuotaLimits;
-    PEPROCESS Process;
     PEPROCESS_QUOTA_BLOCK QuotaBlock, OldQuotaBlock;
     BOOLEAN IncreaseOkay;
     KAPC_STATE SavedApcState;
@@ -368,19 +367,6 @@
     }
     _SEH2_END;
 
-    /* Reference the process */
-    Status = ObReferenceObjectByHandle(ProcessHandle,
-                                       PROCESS_SET_QUOTA,
-                                       PsProcessType,
-                                       PreviousMode,
-                                       (PVOID*)&Process,
-                                       NULL);
-    if (!NT_SUCCESS(Status))
-    {
-        DPRINT1("Failed to reference process handle: 0x%lx\n", Status);
-        return Status;
-    }
-
     /* Check the caller changes the working set size limits */
     if ((CapturedQuotaLimits.MinimumWorkingSetSize != 0) &&
         (CapturedQuotaLimits.MaximumWorkingSetSize != 0))
@@ -418,7 +404,6 @@
         /* Check if the caller has the required privilege */
         if (!SeSinglePrivilegeCheck(SeIncreaseQuotaPrivilege, PreviousMode))
         {
-            ObDereferenceObject(Process);
             return STATUS_PRIVILEGE_NOT_HELD;
         }
 
@@ -460,8 +445,6 @@
         Status = STATUS_SUCCESS;
     }
 
-    /* Dereference the process and return the status */
-    ObDereferenceObject(Process);
     return Status;
 }
 


Reply via email to