]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* util/getroot.c (find_root_devices_from_libzfs): Fix compilation error.
authorRichard Laager <rlaager@wiktel.com>
Fri, 3 Feb 2012 09:50:56 +0000 (10:50 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Fri, 3 Feb 2012 09:50:56 +0000 (10:50 +0100)
(grub_guess_root_devices): Replace strlen with sizeof.
Avoid crash.
(find_root_devices_from_poolname): Remove unused variable.
Handle raidzN.

ChangeLog
util/getroot.c

index 0ab39ba8d35d9a66e16052c6bbad93b5cb169a86..df35f12462a9bdc2878e9929f5bc2bfe4b5cfccb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2012-02-03  Richard Laager <rlaager@wiktel.com>
+
+       * util/getroot.c (find_root_devices_from_libzfs): Fix compilation error.
+       (grub_guess_root_devices): Replace strlen with sizeof.
+       Avoid crash.
+       (find_root_devices_from_poolname): Remove unused variable.
+       Handle raidzN.
+
 2012-02-03  Vladimir Serbinenko  <phcoder@gmail.com>
 
        Support install on multi-device filesystems.
index 12a11b9268b4d589a1ef01e71bfc59e2a09d71c7..868c6d8755fe48d7e3bf1aca80df0ecde1672f39 100644 (file)
@@ -291,9 +291,11 @@ find_root_devices_from_poolname (char *poolname)
          case 2:
            if (strcmp (name, "mirror") && !sscanf (name, "mirror-%u", &dummy)
                && !sscanf (name, "raidz%u", &dummy)
+               && !sscanf (name, "raidz1%u", &dummy)
+               && !sscanf (name, "raidz2%u", &dummy)
+               && !sscanf (name, "raidz3%u", &dummy)
                && !strcmp (state, "ONLINE"))
              {
-               char *tmp;
                if (ndevices >= devices_allocated)
                  {
                    devices_allocated = 2 * (devices_allocated + 8);
@@ -512,7 +514,7 @@ grub_find_root_devices_from_mountinfo (const char *dir, char **relroot)
 static char **
 find_root_devices_from_libzfs (const char *dir)
 {
-  char **device = NULL;
+  char **devices = NULL;
   char *poolname;
   char *poolfs;
 
@@ -520,13 +522,13 @@ find_root_devices_from_libzfs (const char *dir)
   if (! poolname)
     return NULL;
 
-  device = find_root_devices_from_poolname (poolname);
+  devices = find_root_devices_from_poolname (poolname);
 
   free (poolname);
   if (poolfs)
     free (poolfs);
 
-  return device;
+  return devices;
 }
 
 #ifdef __MINGW32__
@@ -799,9 +801,9 @@ grub_guess_root_devices (const char *dir)
     grub_util_error (_("Storage name for `%s' not NUL-terminated"), dir);
 
   os_dev = xmalloc (2 * sizeof (os_dev[0]));
-  os_dev[0] = xmalloc (strlen ("/dev/") + data_len);
-  memcpy (os_dev[0], "/dev/", strlen ("/dev/"));
-  memcpy (os_dev[0] + strlen ("/dev/"), data, data_len);
+  os_dev[0] = xmalloc (sizeof ("/dev/") - 1 + data_len);
+  memcpy (os_dev[0], "/dev/", sizeof ("/dev/") - 1);
+  memcpy (os_dev[0] + sizeof ("/dev/") - 1, data, data_len);
   os_dev[1] = 0;
 
   if (ports && num_ports > 0)
@@ -842,7 +844,12 @@ grub_guess_root_devices (const char *dir)
        {
          char *tmp = *cur;
          int root, dm;
-         *cur = canonicalize_file_name (*cur);
+         *cur = canonicalize_file_name (tmp);
+         if (*cur == NULL)
+           {
+             grub_util_error (_("failed to get canonical path of %s"), tmp);
+             break;
+           }
          free (tmp);
          root = (strcmp (*cur, "/dev/root") == 0);
          dm = (strncmp (*cur, "/dev/dm-", sizeof ("/dev/dm-") - 1) == 0);