From cff3a012898868b46a624ecf5ecc9d41f8446bd9 Mon Sep 17 00:00:00 2001 From: longpanda Date: Tue, 28 Mar 2023 11:38:46 +0800 Subject: [PATCH] Support NTFS with large cluster size (greater than 64KB). --- GRUB2/MOD_SRC/grub-2.04/grub-core/fs/ntfs.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/GRUB2/MOD_SRC/grub-2.04/grub-core/fs/ntfs.c b/GRUB2/MOD_SRC/grub-2.04/grub-core/fs/ntfs.c index e28b82aa..986ef755 100644 --- a/GRUB2/MOD_SRC/grub-2.04/grub-core/fs/ntfs.c +++ b/GRUB2/MOD_SRC/grub-2.04/grub-core/fs/ntfs.c @@ -889,6 +889,7 @@ grub_ntfs_mount (grub_disk_t disk) struct grub_ntfs_bpb bpb; struct grub_ntfs_data *data = 0; grub_uint32_t spc; + grub_uint32_t sectors_per_cluster; if (!disk) goto fail; @@ -903,14 +904,18 @@ grub_ntfs_mount (grub_disk_t disk) if (grub_disk_read (disk, 0, 0, sizeof (bpb), &bpb)) goto fail; + sectors_per_cluster = bpb.sectors_per_cluster; + if (sectors_per_cluster > 0x80) + sectors_per_cluster = 1U << (256U - bpb.sectors_per_cluster); + if (grub_memcmp ((char *) &bpb.oem_name, "NTFS", 4) != 0 - || bpb.sectors_per_cluster == 0 - || (bpb.sectors_per_cluster & (bpb.sectors_per_cluster - 1)) != 0 + || sectors_per_cluster == 0 + || (sectors_per_cluster & (sectors_per_cluster - 1)) != 0 || bpb.bytes_per_sector == 0 || (bpb.bytes_per_sector & (bpb.bytes_per_sector - 1)) != 0) goto fail; - spc = (((grub_uint32_t) bpb.sectors_per_cluster + spc = (((grub_uint32_t) sectors_per_cluster * (grub_uint32_t) grub_le_to_cpu16 (bpb.bytes_per_sector)) >> GRUB_NTFS_BLK_SHR); if (spc == 0)