[syslinux:master] isolinux: Update LBA in getlinsec loop

syslinux-bot for Matt Fleming matt.fleming at intel.com
Sat Feb 16 02:00:03 PST 2013

Commit-ID:  cb015497a4e433ba81a47b28790b325807185617
Gitweb:     http://www.syslinux.org/commit/cb015497a4e433ba81a47b28790b325807185617
Author:     Matt Fleming <matt.fleming at intel.com>
AuthorDate: Thu, 10 Jan 2013 21:33:32 +0000
Committer:  Matt Fleming <matt.fleming at intel.com>
CommitDate: Mon, 14 Jan 2013 09:09:41 +0000

isolinux: Update LBA in getlinsec loop

We need to increment the Logical Block Address in eax by the number of
sectors we passed to getlinsec after every invocation, otherwise we'll
start with the same sector everytime.

This bug was discovered when booting an isohybrid image, which failed
to boot after printing the following error,

    "Image checksum error, sorry..."

because the isolinux.bin was bigger than 32K, and thus invoked the
getlinsec loop that reads the file in chunks.

Cc: H. Peter Anvin <hpa at zytor.com>
Signed-off-by: Matt Fleming <matt.fleming at intel.com>

 core/isolinux.asm | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/core/isolinux.asm b/core/isolinux.asm
index 7a871f0..db6d2d4 100644
--- a/core/isolinux.asm
+++ b/core/isolinux.asm
@@ -426,7 +426,9 @@ MaxLMA		equ 384*1024		; Reasonable limit (384K)
 		xor bx,bx
 		push bp
+		push eax
 		call getlinsec
+		pop eax
 		pop cx
 		mov dx,cx
 		pop bp
@@ -434,6 +436,7 @@ MaxLMA		equ 384*1024		; Reasonable limit (384K)
 		shl cx,SECTOR_SHIFT - 4
 		add bx,cx
+		add eax,edx
 		sub bp,dx
 		jnz .more

More information about the Syslinux-commits mailing list