** Description changed:

  Hi,
  
  I've had a problem when using the `grub-probe` binary to probe large LVM
  partitions (for example, a 1.5 TB partition).
  
  This problem was discovered/tested in an Ubuntu 12.04.5.
  
  When trying to probe these large LVM partitions, we get erros like:
  
-     $ grub-probe -vvv /PATH/TO/MY/LVM
-     [...]
-     grub-core/kern/disk.c:494: Read out of range: sector 0x0 (out of disk).
-     [...]
-     grub-probe: error: unknown filesystem.
+     $ grub-probe -vvv /PATH/TO/MY/LVM
+     [...]
+     grub-core/kern/disk.c:494: Read out of range: sector 0x0 (out of disk).
+     [...]
+     grub-probe: error: unknown filesystem.
  
  This bug seems like this one:
  https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1027363
  
  So, a debug the problem and I discovered that the problem occurs due to
  an inappropriate multiplication in the file grub-core/disk/lvm.c:
  
-     lv->size += seg->extent_count * vg->extent_size;
+     lv->size += seg->extent_count * vg->extent_size;
  
  The lv->size var is an unsigned 64-bits integer. However, the next two
  vars are respectively an unsigned int and an int. As the result of
  (unsigned int) * (int) is an integer, it's very easy to get a
  multiplication overflow (in my case, the result of the multiplication
  was zero -> lv->size = 0, resulting in the "out of disk" error).
  
  So, I'm proposing a patch for this bug (file lvm_big_size.patch, to be
  applied after all Debian patched):
  
-     Index: grub2-1.99/grub-core/disk/lvm.c
-     ===================================================================
-     --- grub2-1.99.orig/grub-core/disk/lvm.c  2011-04-18 21:16:16.000000000 
+0000
-     +++ grub2-1.99/grub-core/disk/lvm.c       2015-07-16 03:05:41.624035502 
+0000
-      -629,7 +629,8 @@
-                   goto lvs_segment_fail;
-                 p += sizeof("type = \"") - 1;
-      
-     -           lv->size += seg->extent_count * vg->extent_size;
-     +           lv->size += ((grub_uint64_t) seg->extent_count
-     +                         * (grub_uint64_t) vg->extent_size);
-      
-                 if (grub_memcmp (p, "striped\"",
-                                  sizeof ("striped\"") - 1) == 0)
+     Index: grub2-1.99/grub-core/disk/lvm.c
+     ===================================================================
+     --- grub2-1.99.orig/grub-core/disk/lvm.c  2011-04-18 21:16:16.000000000 
+0000
+     +++ grub2-1.99/grub-core/disk/lvm.c       2015-07-16 03:05:41.624035502 
+0000
+      -629,7 +629,8 @@
+            goto lvs_segment_fail;
+          p += sizeof("type = \"") - 1;
+ 
+     -           lv->size += seg->extent_count * vg->extent_size;
+     +           lv->size += ((grub_uint64_t) seg->extent_count
+     +                         * (grub_uint64_t) vg->extent_size);
+ 
+          if (grub_memcmp (p, "striped\"",
+             sizeof ("striped\"") - 1) == 0)
  
  I have already tested this patch using the following commands and it
  worked:
  
-     quilt push -a
-     DEB_BUILD_OPTIONS=nocheck fakeroot debian/rules build/grub-coreboot
+     quilt push -a
+     DEB_BUILD_OPTIONS=nocheck fakeroot debian/rules build/grub-coreboot
  
  I'm attaching this patch.
- 
- Additional info: I discovered that this bug already exists in the GRUB
- upstream (file grub-core/disk/lvm.c, line 466). I will also report after
- this bug for them.

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1475337

Title:
  grub-probe can't probe large logical volumes (LVM)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1475337/+subscriptions

-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to