]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
2002-04-30 Yoshinori K. Okuji <okuji@enbug.org>
authorokuji <okuji@localhost>
Tue, 30 Apr 2002 14:10:03 +0000 (14:10 +0000)
committerokuji <okuji@localhost>
Tue, 30 Apr 2002 14:10:03 +0000 (14:10 +0000)
From Jean-Jacques Michel <jjmichel@linbox.com>:
* stage2/boot.c (load_image): For Linux, check if DATA_LEN is
greater than MULTIBOOT_SEARCH. If that's true, read the rest
after copying data already read in BUFFER.

ChangeLog
THANKS
stage2/boot.c

index 1eeeb7ddbce8479ac65472837c34b22e798c5ca0..f4716b4d837aef74faf2c1160ae500f5859b1313 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2002-04-30  Yoshinori K. Okuji  <okuji@enbug.org>
+
+       From Jean-Jacques Michel <jjmichel@linbox.com>:
+       * stage2/boot.c (load_image): For Linux, check if DATA_LEN is
+       greater than MULTIBOOT_SEARCH. If that's true, read the rest
+       after copying data already read in BUFFER.
+       
 2002-04-30  Yoshinori K. Okuji  <okuji@enbug.org>
 
        * stage2/boot.c (load_image): For Linux, don't check if the
diff --git a/THANKS b/THANKS
index dd555b2e75355da7fcec4f48fb08d478336e9a8c..b9685b27e8889b4735bf8b5cb67c56c9724f0811 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -45,6 +45,7 @@ HORIKAWA Kazunori <kaz-hori@tkd.att.ne.jp>
 Jan Fricke <fricke@uni-greifswald.de>
 Jan Zerebecki <jan.list@elite-pferde.de>
 Jason Thomas <jason@topic.com.au>
+Jean-Jacques Michel <jjmichel@linbox.com>
 Jeremy Katz <katzj@redhat.com>
 Jochen Hoenicke <jochen@gnu.org>
 Johannes Kroeger <hanne@squirrel.owl.de>
index ab8f8bc36e43330c61cf92773216c8b7270c7406..466ce71bfa96ba667f600a8100806164af25da91 100644 (file)
@@ -352,8 +352,18 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
            else
              linux_mem_size = 0;
          }
-               
-         memmove ((char *) LINUX_SETUP, buffer, data_len + SECTOR_SIZE);
+
+         /* It is possible that DATA_LEN is greater than MULTIBOOT_SEARCH,
+            so the data may have been read partially.  */
+         if (data_len <= MULTIBOOT_SEARCH)
+           grub_memmove ((char *) LINUX_SETUP, buffer,
+                         data_len + SECTOR_SIZE);
+         else
+           {
+             grub_memmove ((char *) LINUX_SETUP, buffer, MULTIBOOT_SEARCH);
+             grub_read ((char *) LINUX_SETUP + MULTIBOOT_SEARCH,
+                        data_len + SECTOR_SIZE - MULTIBOOT_SEARCH);
+           }
 
          if (lh->header != LINUX_MAGIC_SIGNATURE ||
              lh->version < 0x0200)