Fix sector calculation in GRUB's stage2_eltorito

The sector number was not calculated correctly for sector sizes < 2048
bytes. This commit updates the stage2_eltorito binary file, which was
created from CVS GRUB legacy (tag 'release_0_97') after applying Adam
Lackorzynski's 'os.8' patch
(http://os.inf.tu-dresden.de/~adam/grub/0.97/grub-0.97-os.8.diff.gz)
and the following patch:

diff --git a/stage2/asm.S b/stage2/asm.S
--- a/stage2/asm.S
+++ b/stage2/asm.S
@@ -98,7 +98,7 @@
        .string VERSION
 VARIABLE(config_file)
 #ifndef STAGE1_5
-       .string "(nd)/tftp/menu.lst"
+       .string "/boot/grub/menu.lst"
 #else   /* STAGE1_5 */
        .long   0xffffffff
        .string "/boot/grub/stage2"
diff --git a/stage2/fsys_iso9660.c b/stage2/fsys_iso9660.c
--- a/stage2/fsys_iso9660.c
+++ b/stage2/fsys_iso9660.c
@@ -81,12 +81,12 @@
   if (byte_len <= 0)
     return 1;

-  sector += (byte_offset >> sector_size_lg2);
-  byte_offset &= (buf_geom.sector_size - 1);
   asm volatile ("shl%L0 %1,%0"
            : "=r"(sector)
            : "Ic"((int8_t)(ISO_SECTOR_BITS - sector_size_lg2)),
            "0"(sector));
+  sector += (byte_offset >> sector_size_lg2);
+  byte_offset &= (buf_geom.sector_size - 1);

 #if !defined(STAGE1_5)
   if (disk_read_hook && debug)

This patch fixes #97.
This patch fixes #98.
This commit is contained in:
Christian Prochaska 2012-02-08 20:16:14 +01:00 committed by Norman Feske
parent 7690e5ad07
commit 97b978c6c8

Binary file not shown.