mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 18:15:11 +00:00
[NTFS] - Fix UpdateFileNameRecord() when the file being updated resides in $INDEX_ROOT. Also, don't attempt to read beyond size of index root attribute, and check return value after reading.
svn path=/branches/GSoC_2016/NTFS/; revision=75278
This commit is contained in:
parent
612facc28f
commit
f5b7f90f23
1 changed files with 21 additions and 1 deletions
|
@ -1418,7 +1418,15 @@ UpdateFileNameRecord(PDEVICE_EXTENSION Vcb,
|
||||||
return STATUS_INSUFFICIENT_RESOURCES;
|
return STATUS_INSUFFICIENT_RESOURCES;
|
||||||
}
|
}
|
||||||
|
|
||||||
ReadAttribute(Vcb, IndexRootCtx, 0, IndexRecord, Vcb->NtfsInfo.BytesPerIndexRecord);
|
Status = ReadAttribute(Vcb, IndexRootCtx, 0, IndexRecord, AttributeDataLength(&IndexRootCtx->Record));
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
DPRINT1("ERROR: Failed to read Index Root!\n");
|
||||||
|
ExFreePoolWithTag(IndexRecord, TAG_NTFS);
|
||||||
|
ReleaseAttributeContext(IndexRootCtx);
|
||||||
|
ExFreePoolWithTag(MftRecord, TAG_NTFS);
|
||||||
|
}
|
||||||
|
|
||||||
IndexRoot = (PINDEX_ROOT_ATTRIBUTE)IndexRecord;
|
IndexRoot = (PINDEX_ROOT_ATTRIBUTE)IndexRecord;
|
||||||
IndexEntry = (PINDEX_ENTRY_ATTRIBUTE)((PCHAR)&IndexRoot->Header + IndexRoot->Header.FirstEntryOffset);
|
IndexEntry = (PINDEX_ENTRY_ATTRIBUTE)((PCHAR)&IndexRoot->Header + IndexRoot->Header.FirstEntryOffset);
|
||||||
// Index root is always resident.
|
// Index root is always resident.
|
||||||
|
@ -1440,6 +1448,18 @@ UpdateFileNameRecord(PDEVICE_EXTENSION Vcb,
|
||||||
NewAllocationSize,
|
NewAllocationSize,
|
||||||
CaseSensitive);
|
CaseSensitive);
|
||||||
|
|
||||||
|
if (Status == STATUS_PENDING)
|
||||||
|
{
|
||||||
|
// we need to write the index root attribute back to disk
|
||||||
|
ULONG LengthWritten;
|
||||||
|
Status = WriteAttribute(Vcb, IndexRootCtx, 0, IndexRecord, AttributeDataLength(&IndexRootCtx->Record), &LengthWritten);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
DPRINT1("ERROR: Couldn't update Index Root!\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
ReleaseAttributeContext(IndexRootCtx);
|
ReleaseAttributeContext(IndexRootCtx);
|
||||||
ExFreePoolWithTag(IndexRecord, TAG_NTFS);
|
ExFreePoolWithTag(IndexRecord, TAG_NTFS);
|
||||||
ExFreePoolWithTag(MftRecord, TAG_NTFS);
|
ExFreePoolWithTag(MftRecord, TAG_NTFS);
|
||||||
|
|
Loading…
Reference in a new issue