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/…
==============================================================================
--- 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=65…
==============================================================================
--- 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=65…
==============================================================================
--- 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;
}