[syslinux] isolinux.bin checksum

Thomas Schmitt scdbackup at gmx.net
Mon Jan 8 01:08:20 PST 2018


Hi,

Ady wrote:
> During May 2009, a commit by Peter deleted the checksumiso.pl file. The 
> commit is:
>  core: LZO compress the PM part of the core 
> repo.or.cz/syslinux.git/commit/0d82b71304d596d80f3c4520f9dcf90048ca50b7 
> And so, since version 4.00, the 'code/checksumiso.pl' file is no longer 
> included.
> How is the checksum of isolinux.bin calculated since then?

By the ISO 9660 production program which patches in the Boot Info Table.

The computation of checksumiso.pl can be seen in libisofs function
make_boot_info_table():

  https://dev.lovelyhq.com/libburnia/libisofs/blob/master/libisofs/eltorito.c#L1252
(without Javascript
  https://dev.lovelyhq.com/libburnia/libisofs/raw/master/libisofs/eltorito.c
 you have to hop to the line yourself. Sorry. GitLab. Urghhh ...)

libisofs does not pad to full blocks of 2048 bytes, like checksumiso.pl
did. But the isolinux.bin binary from SYSLINUX installations is already
aligned to that block size. It works for libisofs since about 10 years.


> What was/is the purpose of this range change?

I'm not sure whether it is due to a range change, but it really looks like
the checksum in the file isolinux.bin from SYSLINUX installation differs
from the checksum after the file was put with Boot Info Table into an
ISO 9660 filesystem.

I ran

  xorriso -as mkisofs -o test.iso -b isolinux.bin \
          -no-emul-boot -boot-load-size 4 -boot-info-table \
          /usr/lib/ISOLINUX/isolinux.bin

and the checksum changed from 0x09e675b8 to 0x8cc6977a.

But i never had to change the algorithm in libisofs in order to keep the
result bootable. The isolinux,bin binaries do boot and in
  http://repo.or.cz/syslinux.git/blob/refs/heads/master:/core/isolinux.asm#l262
i see a checksum computation and later a test which would lead to label
"kaboom" if not matching.


So where did the checksum 0x09e675b8 in Sid's installed isolinux.bin come
from ?

The source code sets it to 4-byte value
  0xdeadbeef
See the comments from
  http://repo.or.cz/syslinux.git/blob/f1aa00224b23e2b4c71f204c1417c7b6e5ea8e51:/core/isolinux.asm#l213
up to line 220.

So i assume that checksumming still is applied somehow during building of
isolinux.bin.

In the diff of core/Makefile i see a new program ../lzo/prepcore applied.
In its source, one can see the Boot Info Table checksum calculation:
  http://repo.or.cz/syslinux.git/blob/0d82b71304d596d80f3c4520f9dcf90048ca50b7:/lzo/prepcore.c#l370
It looks to me as if it computes the checksum of payload and block padding.
(This explains why the installed isolinux.bin are always block aligned.)

Nevertheless, something must be different there, compared to libisofs and
the check in the running isolinux.bin boot image program.

For now i fail to see that difference. Maybe others are smarter.
I will later chew a bit more on this riddle.


Have a nice day :)

Thomas



More information about the Syslinux mailing list