NTDirectoryFileSystem: QueryDirectory / GetFileSystemInformation: Prevent possibility of reading data beyond the number of bytes written

This commit is contained in:
Tal Aloni 2017-09-01 11:56:24 +03:00
parent d00d097b34
commit fbb229d2c5

View file

@ -264,9 +264,11 @@ namespace SMBLibrary.Win32
{ {
return status; return status;
} }
restartScan = false; int numberOfBytesWritten = (int)ioStatusBlock.Information;
buffer = ByteReader.ReadBytes(buffer, 0, numberOfBytesWritten);
List<QueryDirectoryFileInformation> page = QueryDirectoryFileInformation.ReadFileInformationList(buffer, 0, informationClass); List<QueryDirectoryFileInformation> page = QueryDirectoryFileInformation.ReadFileInformationList(buffer, 0, informationClass);
result.AddRange(page); result.AddRange(page);
restartScan = false;
} }
fileNameStructure.Dispose(); fileNameStructure.Dispose();
return NTStatus.STATUS_SUCCESS; return NTStatus.STATUS_SUCCESS;
@ -353,6 +355,8 @@ namespace SMBLibrary.Win32
CloseFile(volumeHandle); CloseFile(volumeHandle);
if (status == NTStatus.STATUS_SUCCESS) if (status == NTStatus.STATUS_SUCCESS)
{ {
int numberOfBytesWritten = (int)ioStatusBlock.Information;
buffer = ByteReader.ReadBytes(buffer, 0, numberOfBytesWritten);
result = FileSystemInformation.GetFileSystemInformation(buffer, 0, informationClass); result = FileSystemInformation.GetFileSystemInformation(buffer, 0, informationClass);
} }
return status; return status;