Pavel Naberezhnev 12a378c678
OpenNtfsDxe: Fixed several issues in the NTFS driver (#588)
* 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>
2025-11-02 17:45:38 +03:00
2025-10-12 11:50:32 +01:00
2020-05-17 14:28:41 +03:00
2025-10-24 12:20:35 +01:00
2023-11-06 21:13:47 +03:00

Build Status Scan Status

OpenCore bootloader with development SDK.

Libraries

This repository also contains additional UEFI support common libraries shared by other projects in Acidanthera. The primary purpose of the library set is to provide supplemental functionality for Apple-specific UEFI drivers. Key features:

  • Apple disk image loading support
  • Apple keyboard input aggregation
  • Apple PE image signature verification
  • Apple UEFI secure boot supplemental code
  • Audio management with screen reading support
  • Basic ACPI and SMBIOS manipulation
  • CPU information gathering with timer support
  • Cryptographic primitives (SHA-256, RSA, etc.)
  • Decompression primitives (zlib, lzss, lzvn, etc.)
  • Helper code for ACPI reads and modifications
  • Higher level abstractions for files, strings, UEFI variables
  • Overflow checking arithmetics
  • PE image loading with no UEFI Secure Boot conflict
  • Plist configuration format parsing
  • PNG image manipulation
  • Text output and graphics output implementations
  • XNU kernel driver injection and patch engine

Early history of the codebase could be found in AppleSupportPkg and PicoLib library set by The HermitCrabs Lab.

OcGuardLib

This library implements basic safety features recommended for the use within the project. It implements fast safe integral arithmetics mapping on compiler builtins, type alignment checking, and UBSan runtime, based on NetBSD implementation.

The use of UBSan runtime requires the use of Clang compiler and -fsanitize=undefined argument. Refer to Clang documentation for more details.

Credits

Discussion

Please refer to the following list of OpenCore discussion forums.

Description
OpenCore bootloader
Readme 345 MiB
Languages
C 95.2%
Assembly 1.9%
Shell 0.9%
Python 0.9%
C++ 0.8%
Other 0.3%