[FASTFAT] When dealing with attributes on IRP_MJ_CREATE, filter user input to ensure we have only attributes we can handle.

This applies to files newly created, or for files overwritten where attributes are reset/modified.
This commit is contained in:
Pierre Schweitzer 2018-01-06 22:02:10 +01:00
parent 7bea4ec07e
commit 0eacb0b1ef
No known key found for this signature in database
GPG key ID: 7545556C3D585B0B

View file

@ -728,7 +728,11 @@ VfatCreateFile(
return Status;
}
Attributes = Stack->Parameters.Create.FileAttributes & ~FILE_ATTRIBUTE_NORMAL;
Attributes = (Stack->Parameters.Create.FileAttributes & (FILE_ATTRIBUTE_ARCHIVE |
FILE_ATTRIBUTE_SYSTEM |
FILE_ATTRIBUTE_HIDDEN |
FILE_ATTRIBUTE_DIRECTORY |
FILE_ATTRIBUTE_READONLY));
/* If the file open failed then create the required file */
if (!NT_SUCCESS (Status))
@ -750,7 +754,7 @@ VfatCreateFile(
}
vfatSplitPathName(&PathNameU, NULL, &FileNameU);
Status = VfatAddEntry(DeviceExt, &FileNameU, &pFcb, ParentFcb, RequestedOptions,
(UCHAR)FlagOn(Attributes, FILE_ATTRIBUTE_VALID_FLAGS), NULL);
Attributes, NULL);
vfatReleaseFCB(DeviceExt, ParentFcb);
if (NT_SUCCESS(Status))
{
@ -921,11 +925,11 @@ VfatCreateFile(
{
if (RequestedDisposition == FILE_SUPERSEDE)
{
*pFcb->Attributes = Attributes & ~FILE_ATTRIBUTE_NORMAL;
*pFcb->Attributes = Attributes;
}
else
{
*pFcb->Attributes |= Attributes & ~FILE_ATTRIBUTE_NORMAL;
*pFcb->Attributes |= Attributes;
}
*pFcb->Attributes |= FILE_ATTRIBUTE_ARCHIVE;
VfatUpdateEntry(pFcb, vfatVolumeIsFatX(DeviceExt));