From 9e057b4ea151810e1214b13a91aa1309db1d0551 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Fri, 19 Feb 2016 16:13:57 -0800 Subject: [PATCH] sys: FileNode: properly maintain Security/SecurityChangeNumber fields --- src/sys/file.c | 6 ++++++ src/sys/security.c | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/sys/file.c b/src/sys/file.c index bd79e4a6..a21941e0 100644 --- a/src/sys/file.c +++ b/src/sys/file.c @@ -105,8 +105,13 @@ VOID FspFileNodeDelete(FSP_FILE_NODE *FileNode) { PAGED_CODE(); + FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = + FspFsvolDeviceExtension(FileNode->FsvolDeviceObject); + FsRtlTeardownPerStreamContexts(&FileNode->Header); + FspMetaCacheInvalidateItem(FsvolDeviceExtension->SecurityCache, FileNode->Security); + FspDeviceDereference(FileNode->FsvolDeviceObject); if (0 != FileNode->ExternalFileName) @@ -499,6 +504,7 @@ VOID FspFileNodeSetSecurity(FSP_FILE_NODE *FileNode, PCVOID Buffer, ULONG Size) FspMetaCacheInvalidateItem(FsvolDeviceExtension->SecurityCache, FileNode->Security); FileNode->Security = 0 != Buffer ? FspMetaCacheAddItem(FsvolDeviceExtension->SecurityCache, Buffer, Size) : 0; + FileNode->SecurityChangeNumber++; } BOOLEAN FspFileNodeTrySetSecurity(FSP_FILE_NODE *FileNode, PCVOID Buffer, ULONG Size, diff --git a/src/sys/security.c b/src/sys/security.c index b465d1de..f05162d2 100644 --- a/src/sys/security.c +++ b/src/sys/security.c @@ -292,7 +292,7 @@ NTSTATUS FspFsvolSetSecurityComplete( /* if the security descriptor that we got back is valid */ if (0 < Response->Rsp.SetSecurity.SecurityDescriptor.Size && Response->Buffer + Response->Rsp.SetSecurity.SecurityDescriptor.Size <= - (PUINT8)Response + Response->Size && + (PUINT8)Response + Response->Size && RtlValidRelativeSecurityDescriptor((PVOID)Response->Buffer, Response->Rsp.SetSecurity.SecurityDescriptor.Size, 0)) {