[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug #45562] grub-probe can't probe large logical volumes (LVM)
From: |
Rarylson Freitas |
Subject: |
[bug #45562] grub-probe can't probe large logical volumes (LVM) |
Date: |
Thu, 16 Jul 2015 14:55:23 +0000 |
User-agent: |
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:39.0) Gecko/20100101 Firefox/39.0 |
URL:
<http://savannah.gnu.org/bugs/?45562>
Summary: grub-probe can't probe large logical volumes (LVM)
Project: GNU GRUB
Submitted by: rarylson
Submitted on: Thu 16 Jul 2015 02:55:21 PM GMT
Category: Disk & Partition
Severity: Major
Priority: 5 - Normal
Item Group: Software Error
Status: None
Privacy: Public
Assigned to: None
Originator Name: Rarylson Freitas
Originator Email: address@hidden
Open/Closed: Open
Discussion Lock: Any
Release:
Release: Git master
Reproducibility: Every Time
Planned Release: None
_______________________________________________________
Details:
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 was reported at:
https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1475337
However, as I discovered that the same problematic source code exists in the
upstream too, I'm creating this bug report here too.
Talking about the bug:
I 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 (it was created over the current commit
in Git, Master branch - commit ff3c20):
diff --git a/grub-core/disk/lvm.c b/grub-core/disk/lvm.c
index 7b265c7..4a39a5b 100644
--- a/grub-core/disk/lvm.c
+++ b/grub-core/disk/lvm.c
@@ -463,7 +463,8 @@ grub_lvm_detect (grub_disk_t disk,
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 only tested this patch in my Ubuntu server using the Debian patched code
(not the upstream code). So, I don't know if it works in the upstream code
too.
I'm attaching this patch too.
_______________________________________________________
File Attachments:
-------------------------------------------------------
Date: Thu 16 Jul 2015 02:55:21 PM GMT Name: lvm_big_size_upstream.patch
Size: 490B By: rarylson
<http://savannah.gnu.org/bugs/download.php?file_id=34453>
_______________________________________________________
Reply to this item at:
<http://savannah.gnu.org/bugs/?45562>
_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
- [bug #45562] grub-probe can't probe large logical volumes (LVM),
Rarylson Freitas <=