summaryrefslogtreecommitdiffstats
path: root/FatPkg/EnhancedFatDxe/Init.c
Commit message (Collapse)AuthorAgeFilesLines
* Revert "FatPkg: Validate Reserved FAT Entries on Volume Open"Oliver Smith-Denny9 days1-53/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit 58766a472932c485d41163b1746fb1d9e7984f07. In edk2 commit 58766a4, validation of the two reserved FAT entries was added. However, it also checked the return of FatGetFatEntry to MAX_UINT32, which is what FatGetFatEntry returns when it encounters an error, e.g. not being able to read the disk. However, MAX_UINT32 is also a valid value for the reserved FAT entries and under some conditions these will be returned in the success case. A FAT volume formatted with these valid values of the reserved FAT entries will fail to boot an OS because the opening of the volume will fail. However, the reason FatGetFatEntry returns MAX_UINT32 is that most other uses of the function are comparing it against the END_OF_CHAIN mark, which MAX_UINT32 will trip and those functions will fail out. Because this is a critical bug that can prevent OS booting and the bug the original commit was solving was accounting for a bad FAT filesystem formatting tool, this commit is reverted for now. Future work will clean up FatGetFatEntry so that it returns an EFI_STATUS, but that involves more work and this bug needs to be resolved in the meantime. Signed-off-by: Oliver Smith-Denny <osde@microsoft.com>
* FatPkg: Validate Reserved FAT Entries on Volume OpenOliver Smith-Denny2025-01-211-9/+53
| | | | | | | | | | | | | | | | There are two reserved FAT entries in the FAT filesystem that are expected to have valid contents in them. Today the FAT drivers do not validate these entries when reading from a device for the first time. This can cause infinite loops in the FAT driver when trying to read corrupted disks as reported in https://github.com/tianocore/edk2/issues/9679. This PR follows the recommended update requested in that bug to check the two reserved FAT entries and validate their contents against the spec defined values in both FatPei and EnhancedFatDxe when opening a device for the first time. Signed-off-by: Oliver Smith-Denny <osde@microsoft.com>
* FatPkg: Improvements to Fat to Fix File CorruptionMike Turner2024-09-231-6/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | This patch improves dirty bit checking in FAT and coalesces multiple writes to adjacent blocks into a single write. For good read performance, the Fat code caches 64KB lines from the file system. Any update to the data will force 64KB writes. Writing the full 64KB causes collateral blocks (i.e. blocks belonging to other files) to be written. This is inefficient to write blocks that are not dirty, the FAT driver should only be writing blocks that have actually been updated through its cache. This also resolves an issue with existing bootloaders which have ways to update files outside of the FAT code and the collateral write can corrupt those files. One such file is the Windows BCD that gets updated outside of the FAT code and has been seen to be corrupted by the collateral writes, causing the OS to fail to boot. This fix keeps track of physical disk block (LBA) size and will only mark LBA size zones of the 64KB cache line that are written to. When the file is closed and the cached data is written, only the dirty LBAs are written, which avoids the collateral write and therefore the corruption. In addition, adjacent LBAs will be coalesced into one write for performance considerations. Signed-off-by: Oliver Smith-Denny <osde@linux.microsoft.com>
* FatPkg: Check BlockIo Device Has Supported BlockSizeOliver Smith-Denny2024-09-231-0/+24
| | | | | | | | | | | Per the FAT spec, FAT32 supports block sizes of 512B, 1KB, 2KB, or 4KB. This patch adds a check to the FAT driver initialization to ensure that the underlying BlockIo device supports one of those block sizes and fails initialization otherwise. The underlying BlockIo blocksize is used when we flush the FatDiskCache back to disk and if the block size is an unsupported size, we could cause file corruption. Signed-off-by: Oliver Smith-Denny <osde@linux.microsoft.com>
* FatPkg/EnhancedFatDxe: Downgrade debug level for no media foundNhi Pham2024-09-031-1/+1
| | | | | | | | It is normal for a disk to not have FAT file system (known as No Media), therefore, it should not produce a "failed" entry in the boot console. This aims to lower the debug level to verbose. Signed-off-by: Nhi Pham <nhi@os.amperecomputing.com>
* FatPkg: Apply uncrustify changesMichael Kubacki2021-12-071-49/+65
| | | | | | | | | | | | REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the FatPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Ray Ni <ray.ni@intel.com>
* FatPkg: Change use of EFI_D_* to DEBUG_*Michael D Kinney2021-12-071-2/+2
| | | | | | | | | | | | REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3739 Update all use of EFI_D_* defines in DEBUG() macros to DEBUG_* defines. Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael Kubacki <michael.kubacki@microsoft.com> Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Ray Ni <ray.ni@intel.com>
* FatPkg: Fix spelling errorsSean Brogan2019-10-221-1/+1
| | | | | | | | https://bugzilla.tianocore.org/show_bug.cgi?id=2264 Cc: Ray Ni <ray.ni@intel.com> Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Ray Ni <ray.ni@intel.com>
* FatPkg: Replace BSD License with BSD+Patent LicenseMichael D Kinney2019-04-091-7/+1
| | | | | | | | | | | | | | | | | | | | https://bugzilla.tianocore.org/show_bug.cgi?id=1373 Replace BSD 2-Clause License with BSD+Patent License. This change is based on the following emails: https://lists.01.org/pipermail/edk2-devel/2019-February/036260.html https://lists.01.org/pipermail/edk2-devel/2018-October/030385.html RFCs with detailed process for the license change: V3: https://lists.01.org/pipermail/edk2-devel/2019-March/038116.html V2: https://lists.01.org/pipermail/edk2-devel/2019-March/037669.html V1: https://lists.01.org/pipermail/edk2-devel/2019-March/037500.html Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Ray Ni <ray.ni@intel.com>
* FatPkg/EnhancedFatDxe: Make the comments align with EDKIIcoding styleDandan Bi2016-12-091-60/+35
| | | | | | | Cc: Ruiyu Ni <ruiyu.ni@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Dandan Bi <dandan.bi@intel.com> Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
* FatPkg/EnhancedFatDxe: Make the variable name follow ruleDandan Bi2016-12-091-8/+8
| | | | | | | Cc: Ruiyu Ni <ruiyu.ni@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Dandan Bi <dandan.bi@intel.com> Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
* Change Fat driver to support asynchronous File IO introduced in UEFI spec ↵Ruiyu Ni2016-04-061-3/+5
| | | | | | | | | | | | | | | 2.3.1.D. Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> (based on FatPkg commit 063f6e8a9c263bafd52e1226399fc64d6d721dca) [jordan.l.justen@intel.com: Use script to relicense to 2-clause BSD] Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jordan Justen <jordan.l.justen@intel.com> Acked-by: Mark Doran <mark.doran@intel.com> Acked-by: Laszlo Ersek <lersek@redhat.com>
* Move lock to FAT driver binding start to prevent interrupt during hot plug ↵Qing Huang2016-04-061-17/+2
| | | | | | | | | | | | event. (based on FatPkg commit b449ca31443f754ed2e6998ca32f49547dabd615) [jordan.l.justen@intel.com: Use script to relicense to 2-clause BSD] Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jordan Justen <jordan.l.justen@intel.com> Acked-by: Mark Doran <mark.doran@intel.com> Acked-by: Laszlo Ersek <lersek@redhat.com>
* Update copyright notice formatHot Tian2016-04-061-2/+2
| | | | | | | | | | (based on FatPkg commit 171c4de5919a4638db8f6f472b365ffbbac6070b) [jordan.l.justen@intel.com: Use script to relicense to 2-clause BSD] Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jordan Justen <jordan.l.justen@intel.com> Acked-by: Mark Doran <mark.doran@intel.com> Acked-by: Laszlo Ersek <lersek@redhat.com>
* Fix a migration bug in Fat driver as the value of lock has been changed from ↵Qing Huang2016-04-061-5/+5
| | | | | | | | | | | | EDK library to EDKII library (based on FatPkg commit c243d2ce08e76bfaefc0a3e9256603993a3b5ebe) [jordan.l.justen@intel.com: Use script to relicense to 2-clause BSD] Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jordan Justen <jordan.l.justen@intel.com> Acked-by: Mark Doran <mark.doran@intel.com> Acked-by: Laszlo Ersek <lersek@redhat.com>
* Fix undefined format in debug print statement.Qing Huang2016-04-061-1/+1
| | | | | | | | | | (based on FatPkg commit 407f91e8e23d2ab05bb1f0022974eacc267bb6f1) [jordan.l.justen@intel.com: Use script to relicense to 2-clause BSD] Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jordan Justen <jordan.l.justen@intel.com> Acked-by: Mark Doran <mark.doran@intel.com> Acked-by: Laszlo Ersek <lersek@redhat.com>
* Add EDK II Prime FatPkg New Feature: Support both Unicode Collation and ↵Qing Huang2016-04-061-0/+431
Unicode Collation 2 Protocols Support both Component Name and Component Name 2 Protocol. (based on FatPkg commit e51cd032db84a6fb1f44a0605f80d96f5fdf4bc6) [jordan.l.justen@intel.com: Use script to relicense to 2-clause BSD] Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jordan Justen <jordan.l.justen@intel.com> Acked-by: Mark Doran <mark.doran@intel.com> Acked-by: Laszlo Ersek <lersek@redhat.com>