From 154933ecab30604f0dcc8755d3d324f0a15dd64a Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Sun, 18 Dec 2016 16:02:32 -0800 Subject: [PATCH] sys: overwrite: check hidde/system attributes (IFSTEST) --- src/sys/create.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/sys/create.c b/src/sys/create.c index 179a1184..998d4f38 100644 --- a/src/sys/create.c +++ b/src/sys/create.c @@ -952,6 +952,19 @@ NTSTATUS FspFsvolCreateComplete( if (FileNode->IsDirectory) SetFlag(FileAttributes, FILE_ATTRIBUTE_DIRECTORY); + /* overwrite/supersede operations must have the correct hidden/system attributes set */ + if ((FlagOn(Response->Rsp.Create.Opened.FileInfo.FileAttributes, FILE_ATTRIBUTE_HIDDEN) && + !FlagOn(FileAttributes, FILE_ATTRIBUTE_HIDDEN)) || + (FlagOn(Response->Rsp.Create.Opened.FileInfo.FileAttributes, FILE_ATTRIBUTE_SYSTEM) && + !FlagOn(FileAttributes, FILE_ATTRIBUTE_SYSTEM))) + { + FspFsvolCreatePostClose(FileDesc); + FspFileNodeClose(FileNode, FileObject, TRUE); + + Result = STATUS_ACCESS_DENIED; + FSP_RETURN(); + } + PVOID RequestDeviceObjectValue = FspIopRequestContext(Request, RequestDeviceObject); /* disassociate the FileDesc momentarily from the Request */