** 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
