From 46c2db7796f0c231742bb840c220838ee40323e9 Mon Sep 17 00:00:00 2001 From: Thomas Faber Date: Mon, 20 Oct 2014 08:08:50 +0000 Subject: [PATCH] [NPFS] - 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 --- reactos/drivers/filesystems/npfs/create.c | 8 ++++---- reactos/drivers/filesystems/npfs/secursup.c | 12 ++++++++---- reactos/drivers/filesystems/npfs/seinfo.c | 3 ++- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/reactos/drivers/filesystems/npfs/create.c b/reactos/drivers/filesystems/npfs/create.c index 4be56c67c79..04fdfe85d9c 100644 --- a/reactos/drivers/filesystems/npfs/create.c +++ b/reactos/drivers/filesystems/npfs/create.c @@ -736,12 +736,12 @@ NpCreateNewNamedPipe(IN PNP_DCB Dcb, } SecurityContext = &AccessState->SubjectSecurityContext; - SeLockSubjectContext(&AccessState->SubjectSecurityContext); + SeLockSubjectContext(SecurityContext); - Status = SeAssignSecurity(0, + Status = SeAssignSecurity(NULL, AccessState->SecurityDescriptor, &SecurityDescriptor, - 0, + FALSE, SecurityContext, IoGetFileObjectGenericMapping(), PagedPool); @@ -756,7 +756,7 @@ NpCreateNewNamedPipe(IN PNP_DCB Dcb, Status = ObLogSecurityDescriptor(SecurityDescriptor, &CachedSecurityDescriptor, 1); - ExFreePool(SecurityDescriptor); + ExFreePoolWithTag(SecurityDescriptor, 0); if (!NT_SUCCESS(Status)) { diff --git a/reactos/drivers/filesystems/npfs/secursup.c b/reactos/drivers/filesystems/npfs/secursup.c index f2a99b432cf..60581e1aa85 100644 --- a/reactos/drivers/filesystems/npfs/secursup.c +++ b/reactos/drivers/filesystems/npfs/secursup.c @@ -108,15 +108,19 @@ NpInitializeSecurity(IN PNP_CCB Ccb, 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; if (!ClientContext) return STATUS_INSUFFICIENT_RESOURCES; 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; } diff --git a/reactos/drivers/filesystems/npfs/seinfo.c b/reactos/drivers/filesystems/npfs/seinfo.c index 546388dd1c6..1678ef27afa 100644 --- a/reactos/drivers/filesystems/npfs/seinfo.c +++ b/reactos/drivers/filesystems/npfs/seinfo.c @@ -85,7 +85,8 @@ NpCommonSetSecurityInfo(IN PDEVICE_OBJECT DeviceObject, if (!NT_SUCCESS(Status)) return Status; Status = ObLogSecurityDescriptor(TempSecurityDescriptor, &NewSecurityDescriptor, 1); - ExFreePool(TempSecurityDescriptor); + ASSERT(TempSecurityDescriptor != OldSecurityDescriptor); + ExFreePoolWithTag(TempSecurityDescriptor, 0); if (!NT_SUCCESS(Status)) return Status;