Thomas Schmitt
2018-Jan-26 20:20 UTC
[syslinux] [PATCH] ISOLINUX: Fix checksum calculation in lzo/prepcore.c
The prescription for Boot Info Table says that checksumming begins at byte 64 of isolinux.bin. When prepcore writes isolinux.bin it begins copying bytes from the input file at the offset given by variable "start". But it begins checksumming at offset 64 of the input file. The problem exists since introduction of prepcore by release 4.00. ISO 9660 programs usually fix it when they write the Boot Info Table. Signed-off-by: Thomas Schmitt <scdbackup at gmx.net> --- --- a/lzo/prepcore.c +++ b/lzo/prepcore.c @@ -331,7 +331,7 @@ int main(int argc, char *argv[]) unsigned int ptr; outfile_len ((offset - start + out_len + 2047) & ~2047) - (offset - start); - for (ptr = 64; ptr < offset; ptr += 4) + for (ptr = start + 64; ptr < offset; ptr += 4) csum += get_32((uint32_t *) (infile + ptr)); for (ptr = 0; ptr < outfile_len; ptr += 4) csum += get_32((uint32_t *) (out + ptr)); --
Gene Cumm
2018-Oct-26 10:26 UTC
[syslinux] [PATCH] ISOLINUX: Fix checksum calculation in lzo/prepcore.c
On Fri, Jan 26, 2018 at 3:37 PM Thomas Schmitt via Syslinux <syslinux at zytor.com> wrote:> > > The prescription for Boot Info Table says that checksumming begins > at byte 64 of isolinux.bin. When prepcore writes isolinux.bin it begins > copying bytes from the input file at the offset given by variable "start". > But it begins checksumming at offset 64 of the input file. > The problem exists since introduction of prepcore by release 4.00. > ISO 9660 programs usually fix it when they write the Boot Info Table. > > Signed-off-by: Thomas Schmitt <scdbackup at gmx.net> > --- > --- a/lzo/prepcore.c > +++ b/lzo/prepcore.c > @@ -331,7 +331,7 @@ int main(int argc, char *argv[]) > unsigned int ptr; > outfile_len > ((offset - start + out_len + 2047) & ~2047) - (offset - start); > - for (ptr = 64; ptr < offset; ptr += 4) > + for (ptr = start + 64; ptr < offset; ptr += 4) > csum += get_32((uint32_t *) (infile + ptr)); > for (ptr = 0; ptr < outfile_len; ptr += 4) > csum += get_32((uint32_t *) (out + ptr)); > --Merged. -- -Gene