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

syslinux-bot for Matt Fleming matt.fleming at intel.com
Fri Jan 11 01:36:04 PST 2013

Commit-ID:  17a36e2c91706512e6c425222c9a9a451d9db854
Gitweb:     http://www.syslinux.org/commit/17a36e2c91706512e6c425222c9a9a451d9db854
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: Fri, 11 Jan 2013 08:39:27 +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 8866298..b292d8f 100644
--- a/core/isolinux.asm
+++ b/core/isolinux.asm
@@ -428,7 +428,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
@@ -436,6 +438,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