[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
rootnoverify from different drive bug patch
From: |
adrian15 |
Subject: |
rootnoverify from different drive bug patch |
Date: |
Mon, 19 Mar 2007 10:16:53 +0100 |
User-agent: |
Thunderbird 1.5.0.9 (X11/20070102) |
Attached there is a patch that addresses the following bug:
Let's suppose you install a grub in the partition boot sector from (hd0,5).
Let's suppose that you boot from a grub cdrom and that you want to
chainload it and you do:
rootnoverify (hd0,5)
chainloader +1
boot
This gives you a: Error 25.
If you try:
root (hd0,5)
chainloader +1
boot
it boots... but this is not ok for you because you know you should
chainload a partition boot sector installed grub with rootnoverify.
The problem is in the real_root_func function on builtins.c that when it
does not have to mount it uses:
if (open_partition ())
{
set_bootdev (0);
if (errnum)
return 1;
}
and this set_bootdev uses the saved_drive variable to make this
saved_drive the bootable one. Why? Because later in the code... when the
drive is mounted the variable where the mounted drive is called:
saved_drive :)
However in this part of the code the opened partition (thanks to
open_partition) it is stored on the current_drive variable.
Putting the code like this:
if (open_partition ())
{
saved_drive = current_drive;
set_bootdev (0);
if (errnum)
return 1;
}
fixes the problem.
Now I have some problems when you boot from a grub usb hard disk but
from cdrom it works without any problem, and it is evident that there's
a bug there. The set_bootdev function waits for the saved_drive to be
set and when you run the old rootnoverify code is never set!
adrian15
--- sgd_source_code_0.9586/dev_grub/stage2/builtins.c 2007-03-11
21:45:54.000000000 +0100
+++ sgd_source_code_0.9588/dev_grub/stage2/builtins.c 2007-03-17
23:58:11.000000000 +0100
@@ -3520,6 +3520,7 @@
must be set appropriately. */
if (open_partition ())
{
+ saved_drive = current_drive; // Let's update saved_drive with value
from open_partition - adrian15
set_bootdev (0);
if (errnum)
return 1;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- rootnoverify from different drive bug patch,
adrian15 <=