]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/fs/romfs.c (grub_romfs_mount): Fix a bug with labels going
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Tue, 31 Jan 2012 21:25:07 +0000 (22:25 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Tue, 31 Jan 2012 21:25:07 +0000 (22:25 +0100)
over the sector.

ChangeLog
grub-core/fs/romfs.c

index f1313e3913e8ec02db3dc774d3d5cf49b4fffec6..da706b6014867cb1b8453559989192c481e36731 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2012-01-31  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/fs/romfs.c (grub_romfs_mount): Fix a bug with labels going
+       over the sector.
+
 2012-01-31  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/fs/zfs/zfs.c (get_filesystem_dnode): Support space in
index 11c844e911f32dc34a1dcabde7a3c59f1bd8b768..3ea90a2144a6a3c24a875c512be76d0d87ed6156 100644 (file)
@@ -115,23 +115,26 @@ grub_romfs_mount (grub_device_t dev)
         && ptr - sb.d < (grub_ssize_t) grub_be_to_cpu32 (sb.sb.total_size); ptr++)
     if (!*ptr)
       break;
-  if ((void *) ptr == &sb + 1)
-    for (sec++; ; sec++)
-      {
-       err = grub_disk_read (dev->disk, sec, 0, sizeof (sb), &sb);
-       if (err == GRUB_ERR_OUT_OF_RANGE)
-         err = grub_errno = GRUB_ERR_BAD_FS;
-       if (err)
-         return NULL;
-       for (ptr = sb.d; (void *) ptr < (void *) (&sb + 1)
-              && ptr - sb.d < (grub_ssize_t) grub_be_to_cpu32 (sb.sb.total_size); ptr++)
-         if (!*ptr)
-           break;
-      }
+  while ((void *) ptr == &sb + 1)
+    {
+      sec++;
+      err = grub_disk_read (dev->disk, sec, 0, sizeof (sb), &sb);
+      if (err == GRUB_ERR_OUT_OF_RANGE)
+       err = grub_errno = GRUB_ERR_BAD_FS;
+      if (err)
+       return NULL;
+      for (ptr = sb.d; (void *) ptr < (void *) (&sb + 1)
+            && (ptr - sb.d + (sec << GRUB_DISK_SECTOR_BITS)
+                < grub_be_to_cpu32 (sb.sb.total_size));
+          ptr++)
+       if (!*ptr)
+         break;
+    }
   data = grub_malloc (sizeof (*data));
   if (!data)
     return NULL;
-  data->first_file = ALIGN_UP (ptr - sb.d, GRUB_ROMFS_ALIGN) + sec * 512;
+  data->first_file = ALIGN_UP (ptr + 1 - sb.d, GRUB_ROMFS_ALIGN)
+    + (sec << GRUB_DISK_SECTOR_BITS);
   data->disk = dev->disk;
   return data;
 }