[BASESRV-CSRSRV]

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
This commit is contained in:
Hermès Bélusca-Maïto 2013-04-07 18:28:38 +00:00
parent 463b98e376
commit 74ef4033a2
4 changed files with 29 additions and 36 deletions

View 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))
{

View 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,

View 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;
}

View 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*/