https://git.reactos.org/?p=reactos.git;a=commitdiff;h=d21895e6ef982c2927857…
commit d21895e6ef982c2927857cb18d6fb30370b5db04
Author: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
AuthorDate: Fri May 6 20:34:52 2022 +0200
Commit: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
CommitDate: Mon May 23 19:30:13 2022 +0200
[WIN32K:NTUSER] Only call IntFreeSecurityBuffer() when needed, don't free NULL
buffers.
Addendum to 878c2f44.
---
win32ss/user/ntuser/desktop.c | 19 ++++++++-----------
1 file changed, 8 insertions(+), 11 deletions(-)
diff --git a/win32ss/user/ntuser/desktop.c b/win32ss/user/ntuser/desktop.c
index fcb3a8aa009..2344fea0c01 100644
--- a/win32ss/user/ntuser/desktop.c
+++ b/win32ss/user/ntuser/desktop.c
@@ -563,7 +563,7 @@ IntResolveDesktop(
LUID ProcessLuid;
USHORT StrSize;
SIZE_T MemSize;
- PSECURITY_DESCRIPTOR ServiceSD = NULL;
+ PSECURITY_DESCRIPTOR ServiceSD;
POBJECT_ATTRIBUTES ObjectAttributes = NULL;
PUNICODE_STRING ObjectName;
UNICODE_STRING WinStaName, DesktopName;
@@ -1022,16 +1022,15 @@ IntResolveDesktop(
ObjectName->Length = (USHORT)(wcslen(ObjectName->Buffer) *
sizeof(WCHAR));
/*
- * Set up a security descriptor for the service.
- * A service is generally based upon a desktop
- * and a window station. The newly created window
- * station and desktop will get this security descriptor
+ * Set up a security descriptor for the new service's window station.
+ * A service has an associated window station and desktop. The newly
+ * created window station and desktop will get this security descriptor
* if such objects weren't created before.
*/
Status = IntCreateServiceSecurity(&ServiceSD);
if (!NT_SUCCESS(Status))
{
- ERR("Failed to create a security descriptor for default window
station, Status 0x%08lx\n", Status);
+ ERR("Failed to create a security descriptor for service window
station, Status 0x%08lx\n", Status);
goto Quit;
}
@@ -1051,6 +1050,9 @@ IntResolveDesktop(
KernelMode,
MAXIMUM_ALLOWED,
0, 0, 0, 0, 0);
+
+ IntFreeSecurityBuffer(ServiceSD);
+
if (!NT_SUCCESS(Status))
{
ASSERT(hWinSta == NULL);
@@ -1200,8 +1202,6 @@ Quit:
{
*phWinSta = hWinSta;
*phDesktop = hDesktop;
-
- IntFreeSecurityBuffer(ServiceSD);
return STATUS_SUCCESS;
}
else
@@ -1218,9 +1218,6 @@ Quit:
if (hWinSta)
ObCloseHandle(hWinSta, UserMode);
- if (ServiceSD)
- IntFreeSecurityBuffer(ServiceSD);
-
SetLastNtError(Status);
return Status;
}