- Correctly interpret SeCreateClientSecurity return value in NpInitializeSecurity
- Always charge quota when allocating client context
- Specify explicit 0 tag when freeing allocations with unknown pool tag
- Misc readability fixes

svn path=/trunk/; revision=64839
This commit is contained in:
Thomas Faber 2014-10-20 08:08:50 +00:00
parent 00ee551726
commit 46c2db7796
3 changed files with 14 additions and 9 deletions

View file

@ -736,12 +736,12 @@ NpCreateNewNamedPipe(IN PNP_DCB Dcb,
} }
SecurityContext = &AccessState->SubjectSecurityContext; SecurityContext = &AccessState->SubjectSecurityContext;
SeLockSubjectContext(&AccessState->SubjectSecurityContext); SeLockSubjectContext(SecurityContext);
Status = SeAssignSecurity(0, Status = SeAssignSecurity(NULL,
AccessState->SecurityDescriptor, AccessState->SecurityDescriptor,
&SecurityDescriptor, &SecurityDescriptor,
0, FALSE,
SecurityContext, SecurityContext,
IoGetFileObjectGenericMapping(), IoGetFileObjectGenericMapping(),
PagedPool); PagedPool);
@ -756,7 +756,7 @@ NpCreateNewNamedPipe(IN PNP_DCB Dcb,
Status = ObLogSecurityDescriptor(SecurityDescriptor, Status = ObLogSecurityDescriptor(SecurityDescriptor,
&CachedSecurityDescriptor, &CachedSecurityDescriptor,
1); 1);
ExFreePool(SecurityDescriptor); ExFreePoolWithTag(SecurityDescriptor, 0);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {

View file

@ -108,15 +108,19 @@ NpInitializeSecurity(IN PNP_CCB Ccb,
return Status; return Status;
} }
ClientContext = ExAllocatePoolWithTag(PagedPool, sizeof(*ClientContext), NPFS_CLIENT_SEC_CTX_TAG); ClientContext = ExAllocatePoolWithQuotaTag(PagedPool | POOL_QUOTA_FAIL_INSTEAD_OF_RAISE,
sizeof(*ClientContext),
NPFS_CLIENT_SEC_CTX_TAG);
Ccb->ClientContext = ClientContext; Ccb->ClientContext = ClientContext;
if (!ClientContext) return STATUS_INSUFFICIENT_RESOURCES; if (!ClientContext) return STATUS_INSUFFICIENT_RESOURCES;
Status = SeCreateClientSecurity(Thread, &Ccb->ClientQos, 0, ClientContext); Status = SeCreateClientSecurity(Thread, &Ccb->ClientQos, 0, ClientContext);
if (!NT_SUCCESS(Status)) return Status; if (!NT_SUCCESS(Status))
{
ExFreePool(Ccb->ClientContext);
Ccb->ClientContext = NULL;
}
ExFreePool(Ccb->ClientContext);
Ccb->ClientContext = NULL;
return Status; return Status;
} }

View file

@ -85,7 +85,8 @@ NpCommonSetSecurityInfo(IN PDEVICE_OBJECT DeviceObject,
if (!NT_SUCCESS(Status)) return Status; if (!NT_SUCCESS(Status)) return Status;
Status = ObLogSecurityDescriptor(TempSecurityDescriptor, &NewSecurityDescriptor, 1); Status = ObLogSecurityDescriptor(TempSecurityDescriptor, &NewSecurityDescriptor, 1);
ExFreePool(TempSecurityDescriptor); ASSERT(TempSecurityDescriptor != OldSecurityDescriptor);
ExFreePoolWithTag(TempSecurityDescriptor, 0);
if (!NT_SUCCESS(Status)) return Status; if (!NT_SUCCESS(Status)) return Status;