]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/kern/emu/getroot.c (grub_guess_root_device): Don't accept
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Thu, 23 Jun 2011 17:50:41 +0000 (19:50 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Thu, 23 Jun 2011 17:50:41 +0000 (19:50 +0200)
/dev/root as a valid device.

ChangeLog
grub-core/kern/emu/getroot.c

index a7f6ce738f9a69cb4b1ab494d25cf6d912e7a0a3..0ea09a0ab15ffd7622dcc5c354b6e7e827d9276a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,12 @@
+2011-06-23  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/kern/emu/getroot.c (grub_guess_root_device): Don't accept
+       /dev/root as a valid device.
+
 2011-06-23  Jim Meyering  <meyering@redhat.com>
 
-       avoid NULL deref in grub_device_open
+       Avoid NULL deref in grub_device_open.
+
        * grub-core/kern/device.c (grub_device_open): Don't dereference
        a NULL pointer upon failed grub_env_get.
 
index 6e49cc31b95af4e3cacadad2be7c84e1ea23d307..db27abf7432e1fbd1ba84b0fc236b70eb02e8bce 100644 (file)
@@ -616,13 +616,15 @@ grub_guess_root_device (const char *dir)
 
   if (os_dev)
     {
-      if (strncmp (os_dev, "/dev/dm-", sizeof ("/dev/dm-") - 1) != 0)
+      int dm = (strncmp (os_dev, "/dev/dm-", sizeof ("/dev/dm-") - 1) == 0);
+      int root = (strcmp (os_dev, "/dev/root") == 0);
+      if (!dm && !root)
        return os_dev;
       if (stat (os_dev, &st) < 0)
        grub_util_error ("cannot stat `%s'", os_dev);
       free (os_dev);
       dev = st.st_rdev;
-      return grub_find_device ("/dev/mapper", dev);
+      return grub_find_device (dm ? "/dev/mapper" : "/dev", dev);
     }
 
   if (stat (dir, &st) < 0)