[BASESRV-CSRSRV]
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Sun, 7 Apr 2013 18:28:38 +0000 (18:28 +0000)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Sun, 7 Apr 2013 18:28:38 +0000 (18:28 +0000)
A little bit of code reorganization (more a "matter of taste"; delete allocated pointers in the reverse way we allocated them).

[NTDLL]
- Free a used SID (i.e. fix a memory leak).
- Only just "reserve" memory pages for the section for the CSR port. Memory will be actually committed later on (checked on Windows Server 2003 and on http://j00ru.vexillium.org/?p=527 ).

svn path=/branches/ros-csrss/; revision=58716

dll/ntdll/csr/connect.c
subsystems/win/basesrv/dosdev.c
subsystems/win/basesrv/init.c
subsystems/win32/csrsrv/init.c

index 82c91c8..ffe2a42 100644 (file)
@@ -221,7 +221,7 @@ CsrpConnectToServer(IN PWSTR ObjectDirectory)
                              NULL,
                              &CsrSectionViewSize,
                              PAGE_READWRITE,
-                             SEC_COMMIT,
+                             SEC_RESERVE,
                              NULL);
     if (!NT_SUCCESS(Status))
     {
@@ -250,16 +250,16 @@ CsrpConnectToServer(IN PWSTR ObjectDirectory)
 
     /* Create a SID for us */
     Status = RtlAllocateAndInitializeSid(&NtSidAuthority,
-                                          1,
-                                          SECURITY_LOCAL_SYSTEM_RID,
-                                          0,
-                                          0,
-                                          0,
-                                          0,
-                                          0,
-                                          0,
-                                          0,
-                                          &SystemSid);
+                                         1,
+                                         SECURITY_LOCAL_SYSTEM_RID,
+                                         0,
+                                         0,
+                                         0,
+                                         0,
+                                         0,
+                                         0,
+                                         0,
+                                         &SystemSid);
     if (!NT_SUCCESS(Status))
     {
         /* Failure */
@@ -278,6 +278,7 @@ CsrpConnectToServer(IN PWSTR ObjectDirectory)
                                  NULL,
                                  &ConnectionInfo,
                                  &ConnectionInfoLength);
+    RtlFreeSid(SystemSid);
     NtClose(CsrSectionHandle);
     if (!NT_SUCCESS(Status))
     {
index dd4a801..8766ebf 100644 (file)
@@ -420,8 +420,8 @@ CSR_API(BaseSrvDefineDosDevice)
                                     &AdminSid);
 
         SidLength = RtlLengthSid(SystemSid) +
-            RtlLengthSid(AdminSid) +
-            RtlLengthSid(WorldSid);
+                    RtlLengthSid(AdminSid) +
+                    RtlLengthSid(WorldSid);
         Length = sizeof(ACL) + SidLength + 3 * sizeof(ACCESS_ALLOWED_ACE);
 
         SecurityDescriptor = RtlAllocateHeap(BaseSrvHeap,
index 569988d..edda67e 100644 (file)
@@ -202,9 +202,9 @@ CreateBaseAcls(OUT PACL* Dacl,
 
     /* Allocate one ACL with 3 ACEs each for one SID */
     AclLength = sizeof(ACL) + 3 * sizeof(ACCESS_ALLOWED_ACE) +
-                RtlLengthSid(SystemSid) +
-                RtlLengthSid(RestrictedSid) +
-                RtlLengthSid(WorldSid);
+                    RtlLengthSid(SystemSid) +
+                    RtlLengthSid(WorldSid)  +
+                    RtlLengthSid(RestrictedSid);
     *Dacl = RtlAllocateHeap(BaseSrvHeap, 0, AclLength);
     ASSERT(*Dacl != NULL);
 
@@ -239,9 +239,9 @@ CreateBaseAcls(OUT PACL* Dacl,
     ASSERT(NT_SUCCESS(Status));
 
     /* The SIDs are captured, can free them now */
-    RtlFreeHeap(BaseSrvHeap, 0, SystemSid);
-    RtlFreeHeap(BaseSrvHeap, 0, WorldSid);
-    RtlFreeHeap(BaseSrvHeap, 0, RestrictedSid);
+    RtlFreeSid(RestrictedSid);
+    RtlFreeSid(WorldSid);
+    RtlFreeSid(SystemSid);
     return Status;
 }
 
index 9fd4590..3795185 100644 (file)
@@ -350,10 +350,10 @@ GetDosDevicesProtection(OUT PSECURITY_DESCRIPTOR DosDevicesSd)
 /* FIXME: semi-failure cases! Quickie: */
 Quickie:
     /* Free the SIDs */
-    RtlFreeSid(SystemSid);
-    RtlFreeSid(WorldSid);
-    RtlFreeSid(AdminSid);
     RtlFreeSid(CreatorSid);
+    RtlFreeSid(AdminSid);
+    RtlFreeSid(WorldSid);
+    RtlFreeSid(SystemSid);
 
     /* Return */
     return Status;
@@ -820,32 +820,24 @@ CsrCreateLocalSystemSD(OUT PSECURITY_DESCRIPTOR *LocalSystemSd)
 
     /* Now create the SD itself */
     Status = RtlCreateSecurityDescriptor(SystemSd, SECURITY_DESCRIPTOR_REVISION);
-    if (!NT_SUCCESS(Status))
-    {
-        /* Fail */
-        RtlFreeHeap(CsrHeap, 0, SystemSd);
-        return Status;
-    }
+    if (!NT_SUCCESS(Status)) goto Quit;
 
     /* Create the DACL for it */
     RtlCreateAcl(Dacl, Length, ACL_REVISION2);
 
     /* Create the ACE */
     Status = RtlAddAccessAllowedAce(Dacl, ACL_REVISION, PORT_ALL_ACCESS, SystemSid);
-    if (!NT_SUCCESS(Status))
-    {
-        /* Fail */
-        RtlFreeHeap(CsrHeap, 0, SystemSd);
-        return Status;
-    }
+    if (!NT_SUCCESS(Status)) goto Quit;
 
     /* Clear the DACL in the SD */
     Status = RtlSetDaclSecurityDescriptor(SystemSd, TRUE, Dacl, FALSE);
+    if (!NT_SUCCESS(Status)) goto Quit;
+
+Quit:
     if (!NT_SUCCESS(Status))
     {
-        /* Fail */
         RtlFreeHeap(CsrHeap, 0, SystemSd);
-        return Status;
+        SystemSd = NULL;
     }
 
     /* Free the SID and return*/