[Bug 1475337] Re: grub-probe can't probe large logical volumes (LVM)
Rarylson Freitas
rarylson at gmail.com
Fri Jul 17 20:21:12 UTC 2015
More info:
The output of the "problematic" LV is:
$ lvs -o seg_size,vg_extent_size --units s --nosuffix \
> /dev/data/mail
SSize Ext
4294967296 8192
And if I do not specify the LV (output of all LVs):
$ lvs -o seg_size,vg_extent_size --units s --nosuffix
SSize Ext
1949696 8192
3221225472 8192
2147483648 8192
4294967296 8192
4294967296 8192
1050673152 8192
52428800 8192
52428800 8192
2147483648 8192
209715200 8192
10485760 8192
62914560 8192
41943040 8192
83886080 8192
10485760 8192
62914560 8192
1048576000 8192
1048576000 8192
97648640 8192
The problem only occurs when probing our biggest LV.
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to grub2 in Ubuntu.
https://bugs.launchpad.net/bugs/1475337
Title:
grub-probe can't probe large logical volumes (LVM)
Status in grub2 package in Ubuntu:
New
Bug description:
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.
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;
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)
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
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.
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1475337/+subscriptions
More information about the foundations-bugs
mailing list