mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-02 01:18:26 +03:00
format_text: properly validate PV size for restore
Use 64bit arithmentic for PV size calculation (Coverity). Also remove sector shift for compared PV size, since all values are already held in sectors. This fixes validatio of PV size when restoring PV from vg metadata backup file.
This commit is contained in:
parent
2cea1c1bd9
commit
05934d2538
@ -1,5 +1,6 @@
|
||||
Version 2.02.120 -
|
||||
===============================
|
||||
Properly validate PV size for pvcreate --restorefile.
|
||||
Fix check if pvcreate wiped device (2.02.117).
|
||||
Fix storing of vgid when caching metadata (2.02.118).
|
||||
Fix recursive lvm-config man page. (2.02.119)
|
||||
|
@ -1603,7 +1603,7 @@ static int _text_pv_initialise(const struct format_type *fmt,
|
||||
if (rp->extent_count)
|
||||
pv->pe_count = rp->extent_count;
|
||||
|
||||
if ((pv->pe_start + pv->pe_count * pv->pe_size - 1) > (pv->size << SECTOR_SHIFT)) {
|
||||
if ((pv->pe_start + pv->pe_count * (uint64_t)pv->pe_size - 1) > pv->size) {
|
||||
log_error("Physical extents end beyond end of device %s.",
|
||||
pv_dev_name(pv));
|
||||
return 0;
|
||||
@ -2172,7 +2172,7 @@ static int _text_pv_add_metadata_area(const struct format_type *fmt,
|
||||
* LABEL_SCAN_SIZE.
|
||||
*/
|
||||
pe_end = pv->pe_count ? (pv->pe_start +
|
||||
pv->pe_count * pv->pe_size - 1) << SECTOR_SHIFT
|
||||
pv->pe_count * (uint64_t)pv->pe_size - 1) << SECTOR_SHIFT
|
||||
: 0;
|
||||
|
||||
if (pe_start || pe_start_locked) {
|
||||
|
37
test/shell/pvcreate-restore.sh
Normal file
37
test/shell/pvcreate-restore.sh
Normal file
@ -0,0 +1,37 @@
|
||||
#!/bin/sh
|
||||
# Copyright (C) 2015 Red Hat, Inc. All rights reserved.
|
||||
#
|
||||
# This copyrighted material is made available to anyone wishing to use,
|
||||
# modify, copy, or redistribute it subject to the terms and conditions
|
||||
# of the GNU General Public License v.2.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software Foundation,
|
||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
. lib/inittest
|
||||
|
||||
aux prepare_vg 4
|
||||
|
||||
lvcreate --type snapshot -s -L10 -n $lv1 $vg --virtualsize 2T
|
||||
lvcreate --type snapshot -s -L10 -n $lv2 $vg --virtualsize 4T
|
||||
lvcreate --type snapshot -s -L10 -n $lv3 $vg --virtualsize 4194300M
|
||||
|
||||
aux extend_filter_LVMTEST
|
||||
|
||||
vgcreate $vg1 "$DM_DEV_DIR/$vg/$lv2"
|
||||
|
||||
vgcfgbackup -f vgback $vg1
|
||||
|
||||
UUID=$(get pv_field "$DM_DEV_DIR/$vg/$lv2" uuid)
|
||||
pvremove -ff -y "$DM_DEV_DIR/$vg/$lv2"
|
||||
|
||||
# too small to fit
|
||||
fail pvcreate --restorefile vgback --uuid $UUID "$DM_DEV_DIR/$vg/$lv1"
|
||||
|
||||
# still does not fit
|
||||
fail pvcreate --restorefile vgback --uuid $UUID "$DM_DEV_DIR/$vg/$lv3"
|
||||
|
||||
pvcreate --restorefile vgback --uuid $UUID "$DM_DEV_DIR/$vg/$lv2"
|
||||
|
||||
vgremove -ff $vg
|
Loading…
Reference in New Issue
Block a user