]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/disk/mdraid1x_linux.c (grub_mdraid_detect): Add missing
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Fri, 7 Jan 2011 15:17:24 +0000 (16:17 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Fri, 7 Jan 2011 15:17:24 +0000 (16:17 +0100)
endian transformations.
* grub-core/disk/mdraid_linux.c (grub_mdraid_detect): Likewise.
Based on report by: Doug Nazar.

ChangeLog
grub-core/disk/mdraid1x_linux.c
grub-core/disk/mdraid_linux.c

index c5cc7afa6a03ea61cec47ead0df85238f8b76fc5..0362abd51b565a2bd1d30860af2aa5771343b1cd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2011-01-07  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/disk/mdraid1x_linux.c (grub_mdraid_detect): Add missing
+       endian transformations.
+       * grub-core/disk/mdraid_linux.c (grub_mdraid_detect): Likewise.
+       Based on report by: Doug Nazar.
+
 2011-01-07  Doug Nazar  <nazard.michi@gmail.com>
 
        * grub-core/disk/raid5_recover.c (grub_raid5_recover): Add missing
index b6a48b84822bd4ae484b327ab37a4f1a810656f9..155210df3d4e37bcead72192e850eff2fc462bb2 100644 (file)
@@ -143,24 +143,27 @@ grub_mdraid_detect (grub_disk_t disk, struct grub_raid_array *array,
                          &sb))
        return grub_errno;
 
-      if (sb.magic != SB_MAGIC)
+      if (grub_le_to_cpu32 (sb.magic) != SB_MAGIC)
        continue;
 
       {
        grub_uint64_t sb_size;
        struct grub_raid_super_1x *real_sb;
+       grub_uint32_t level;
 
-       if (sb.major_version != 1)
+       if (grub_le_to_cpu32 (sb.major_version) != 1)
          return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
                             "Unsupported RAID version: %d",
-                            sb.major_version);
+                            grub_le_to_cpu32 (sb.major_version));
+
+       level = grub_le_to_cpu32 (sb.level);
 
        /* Multipath.  */
-       if ((int) sb.level == -4)
-         sb.level = 1;
+       if ((int) level == -4)
+         level = 1;
 
-       if (sb.level != 0 && sb.level != 1 && sb.level != 4 &&
-           sb.level != 5 && sb.level != 6 && sb.level != 10)
+       if (level != 0 && level != 1 && level != 4 &&
+           level != 5 && level != 6 && level != 10)
          return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
                             "Unsupported RAID level: %d", sb.level);
 
@@ -209,7 +212,7 @@ grub_mdraid_detect (grub_disk_t disk, struct grub_raid_array *array,
 
        grub_memcpy (array->uuid, real_sb->set_uuid, 16);
        
-       *start_sector = real_sb->data_offset;
+       *start_sector = grub_le_to_cpu64 (real_sb->data_offset);
 
        grub_free (real_sb);
        return 0;
index dc0d80ffd4aa8bc706f2063caa2ed5262e1ea1b5..7aa48fd7a3b0d08b7ff4a2fe9fea9d2d74907835 100644 (file)
@@ -167,6 +167,7 @@ grub_mdraid_detect (grub_disk_t disk, struct grub_raid_array *array,
   grub_uint64_t size;
   struct grub_raid_super_09 sb;
   grub_uint32_t *uuid;
+  grub_uint32_t level;
 
   /* The sector where the mdraid 0.90 superblock is stored, if available.  */
   size = grub_disk_get_size (disk);
@@ -178,36 +179,40 @@ grub_mdraid_detect (grub_disk_t disk, struct grub_raid_array *array,
     return grub_errno;
 
   /* Look whether there is a mdraid 0.90 superblock.  */
-  if (sb.md_magic != SB_MAGIC)
+  if (grub_le_to_cpu32 (sb.md_magic) != SB_MAGIC)
     return grub_error (GRUB_ERR_OUT_OF_RANGE, "not 0.9x raid");
 
-  if (sb.major_version != 0 || sb.minor_version != 90)
+  if (grub_le_to_cpu32 (sb.major_version) != 0
+      || grub_le_to_cpu32 (sb.minor_version) != 90)
     return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
                       "unsupported RAID version: %d.%d",
-                      sb.major_version, sb.minor_version);
+                      grub_le_to_cpu32 (sb.major_version),
+                      grub_le_to_cpu32 (sb.minor_version));
 
   /* FIXME: Check the checksum.  */
 
+  level = grub_le_to_cpu32 (sb.level);
   /* Multipath.  */
-  if ((int) sb.level == -4)
-    sb.level = 1;
+  if ((int) level == -4)
+    level = 1;
 
-  if (sb.level != 0 && sb.level != 1 && sb.level != 4 &&
-      sb.level != 5 && sb.level != 6 && sb.level != 10)
+  if (level != 0 && level != 1 && level != 4 &&
+      level != 5 && level != 6 && level != 10)
     return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
-                      "unsupported RAID level: %d", sb.level);
-  if (sb.this_disk.number == 0xffff || sb.this_disk.number == 0xfffe)
+                      "unsupported RAID level: %d", level);
+  if (grub_le_to_cpu32 (sb.this_disk.number) == 0xffff
+      || grub_le_to_cpu32 (sb.this_disk.number) == 0xfffe)
     return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
                       "spares aren't implemented");
 
   array->name = NULL;
-  array->number = sb.md_minor;
-  array->level = sb.level;
-  array->layout = sb.layout;
-  array->total_devs = sb.raid_disks;
-  array->disk_size = (sb.size) ? sb.size * 2 : sector;
-  array->chunk_size = sb.chunk_size >> 9;
-  array->index = sb.this_disk.number;
+  array->number = grub_le_to_cpu32 (sb.md_minor);
+  array->level = level;
+  array->layout = grub_le_to_cpu32 (sb.layout);
+  array->total_devs = grub_le_to_cpu32 (sb.raid_disks);
+  array->disk_size = (sb.size) ? grub_le_to_cpu32 (sb.size) * 2 : sector;
+  array->chunk_size = grub_le_to_cpu32 (sb.chunk_size) >> 9;
+  array->index = grub_le_to_cpu32 (sb.this_disk.number);
   array->uuid_len = 16;
   array->uuid = grub_malloc (16);
   if (!array->uuid)