Bug#857597: "isolinux.bin missing or corrupt" when booting USB flash drive in old PC
Hi,
the following patch has been committed to SYSLINUX to fix the C/H/S
addressing problems in isohybrid MBR and isolinux.bin :
http://git.zytor.com/syslinux/syslinux.git/commit/?id=32c09027423f61c305e2423e52f5f69ecad8e2c0
diff --git a/mbr/isohdpfx.S b/mbr/isohdpfx.S
index 17e1efe..f9e9691 100644
--- a/mbr/isohdpfx.S
+++ b/mbr/isohdpfx.S
@@ -175,12 +175,12 @@ next:
/* Get (C)HS geometry */
movb $0x08, %ah
int $0x13
- andw $0x3f, %cx /* Sector count */
popw %bx /* EBIOS flag */
- pushw %cx /* -16: Save sectors on the stack */
movzbw %dh, %ax /* dh = max head */
incw %ax /* From 0-based max to count */
- pushw %ax /* -18: Save heads on the stack */
+ pushw %ax /* -16: Save heads on the stack */
+ andw $0x3f, %cx /* Sector count */
+ pushw %cx /* -18: Save sectors on the stack */
mulw %cx /* Heads*sectors -> sectors per cylinder */
pushw %bx /* -20: EBIOS flag */
The other part of the changeset proposed on 25 Mar 2017 is now committed as
http://git.zytor.com/syslinux/syslinux.git/commit/?id=8739e2ff9ba3f92652c8df846924fd00e1ce2753
It fixes the problem that an early decision against LBA addressing after
INT 13 AH 41 could push a non-zero CX value to the stack, which
isolinux.bin would pop and interpret as instruction to use LBA addressing.
(isolinux.bin is wrong here. It should only use LBA if bit 0 of the
popped CX is set. But even that could be wrongly sent from MBR if not
the "Clear EBIOS flag" fix is applied.)
Have a nice day :)
Thomas
Reply to: