mirror of
https://github.com/acidanthera/OpenCorePkg.git
synced 2025-12-08 19:25:01 +00:00
* Incorrect EFI_FILE_PROTOCOL version
The driver implements EFI_FILE_PROTOCOL_REVISION version,
not EFI_FILE_PROTOCOL_REVISION2 version.
* Fix directory reading logic by implementing EFI_FILE_INFO cache
Problem:
According to the UEFI specification, reading from a directory must
return zero Size for the EFI_FILE_INFO structure when directory
entries are exhausted. The original FileReadDir() implementation
always returned a fixed EFI_FILE_INFO size before reporting
end-of-directory. This caused fuzzing tests to enter an infinite
directory iteration loop due to unexpected behavior.
Solution:
Introduced an EFI_FILE_INFO cache with the following logic:
1. FileReadDir() caches EFI_FILE_INFO on first read. The cache key
combines directory path hash (with FNV-1a 64-bit hashing) and
DirIndex value
2. When the key matches and buffer size is sufficient:
- Data is returned from cache
- Cache is cleared
3. When the key matches with insufficent buffer size:
- Cache is preserved for subsequent retries
4. Key mismatch triggers cache reset
Additional benefits:
- Eliminates fixed MINIMUM_INFO_LENGTH requirement
- FileReadDir() now requests only required buffer size
Note:
A more elegant solution is being considered for future NTFS
driver improvements, requiring further analysis and testing.
Links:
FNV Hash: http://www.isthe.com/chongo/tech/comp/fnv/index.html
* Fix memory leak in FileReadDir() function
Function NtfsOppen() allocates additional memory for
file structure. After use it, need to free by call FreeFile()
function.
* Fixed invalid pointer access in ReadAttr() function
Solution:
- Added a null check for the Current field in ReadAttr() function
- Added validation for MFT record flags in the InitFile() function
Signed-off-by: Pavel Naberezhnev <pavelnaberezhnev@gmail.com>