From 2f514a5127feebcf4b827b30f830a4c1bd58ac01 Mon Sep 17 00:00:00 2001 From: Stanislav Motylkov Date: Thu, 18 Jun 2026 00:55:27 +0300 Subject: [PATCH] [FREELDR] Workaround for BIOSes that report unusual geometry for CD-ROMs This is needed for ISO filesystem driver to work correctly, as it assumes 2048 bytes per sector for CD-ROM media. Happens on 86Box with board `[i430FX] ASUS P/I-P55TP4XE`, Bochs emulator with `01/17/97-i440FX-2A69HV3CC-00` BIOS, and some other real machines. CORE-20640 --- boot/freeldr/freeldr/arch/i386/hwdisk.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/boot/freeldr/freeldr/arch/i386/hwdisk.c b/boot/freeldr/freeldr/arch/i386/hwdisk.c index 316cca5bddf..2315c191a03 100644 --- a/boot/freeldr/freeldr/arch/i386/hwdisk.c +++ b/boot/freeldr/freeldr/arch/i386/hwdisk.c @@ -90,6 +90,7 @@ DiskOpen(CHAR* Path, OPENMODE OpenMode, ULONG* FileId) GEOMETRY Geometry; ULONGLONG SectorOffset; ULONGLONG SectorCount; + static BOOLEAN PrintForce = FALSE; if (DiskReadBufferSize == 0) { @@ -141,6 +142,16 @@ DiskOpen(CHAR* Path, OPENMODE OpenMode, ULONG* FileId) if (!Context) return ENOMEM; + if (DriveType == CdromController && SectorSize != 2048) + { + /* Workaround for CORE-20640 */ + if (!PrintForce) + { + ERR("BIOS reports BytesPerSector = %d for CD-ROM, forcing 2048\n", SectorSize); + PrintForce = TRUE; + } + SectorSize = 2048; + } Context->DriveNumber = DriveNumber; Context->IsFloppy = (DriveType == FloppyDiskPeripheral); Context->SectorSize = SectorSize;