1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00
lvm2/lib
Peter Rajnoha 34d207d9b3 lvmetad: fix mda offset/size overflow if >= 4g (32bit)
When reading an info about MDAs from lvmetad, we need to use 64 bit
int to read the value of the offset/size, otherwise the value is
overflows and then it's used throughout!

This is dangerous if we're trying to write such metadata area then,
mostly visible if we're using 2 mdas where the 2nd one is at the end
of the underlying device and hence the value of the mda offset is
high enough to cause problems:

(the offset trimmed to value of 0 instead of 4096m, so we write
at the very start of the disk (or elsewhere if the offset has
some other value!)

[1] raw/~ # lvcreate -s -l 100%FREE vg --virtualsize 4097m
  Logical volume "lvol0" created

[1] raw/~ # pvcreate --metadatacopies 2 /dev/vg/lvol0
  Physical volume "/dev/vg/lvol0" successfully created

[1] raw/~ # hexdump -n 512 /dev/vg/lvol0
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
0000200

[1] raw/~ # pvchange -u /dev/vg/lvol0
  Physical volume "/dev/vg/lvol0" changed
  1 physical volume changed / 0 physical volumes not changed

[1] raw/~ # hexdump -n 512 /dev/vg/lvol0
0000000 d43e d2a5 4c20 4d56 2032 5b78 4135 7225
0000010 4e30 3e2a 0001 0000 0000 0000 0000 0000
0000020 0000 0010 0000 0000 0000 0000 0000 0000
0000030 0000 0000 0000 0000 0000 0000 0000 0000
*
0000200

=======

(the offset overflows to undefined values which is far behind
the end of the disk)

[1] raw/~ # lvcreate -s -l 100%FREE vg --virtualsize 100g
  Logical volume "lvol0" created

[1] raw/~ # pvcreate --metadatacopies 2 /dev/vg/lvol0
  Physical volume "/dev/vg/lvol0" successfully created

[1] raw/~ # pvchange -u /dev/vg/lvol0
  /dev/vg/lvol0: lseek 18446744073708503040 failed: Invalid argument
  /dev/vg/lvol0: lseek 18446744073708503040 failed: Invalid argument
  Failed to store physical volume "/dev/vg/lvol0"
  0 physical volumes changed / 1 physical volume not changed
2013-08-06 13:37:42 +02:00
..
activate coverity: pointer validation 2013-07-22 12:41:21 +02:00
cache cleanup: simplier string reset 2013-07-22 12:41:21 +02:00
commands filters: fix segfault on incorrect global_filter 2013-07-26 13:04:53 +02:00
config thin: add thin_repair and thin_dump options 2013-07-31 15:30:47 +02:00
datastruct Switch to return void 2012-02-08 12:52:58 +00:00
device dev-type: dev_get_primary_dev default error code 0, not -1 2013-07-19 15:26:53 +02:00
display display: fix units for sizes <1k 2013-07-18 17:55:58 +01:00
error cleanup: drop unneeded included header files 2012-08-23 14:37:20 +02:00
filters config: add config_source_t type to identify configuration source 2013-07-02 15:19:08 +02:00
format1 cleanup: drop unused headers 2013-06-16 00:07:32 +02:00
format_pool cleanup: drop unused headers 2013-06-16 00:07:32 +02:00
format_text lvmetad: fix mda offset/size overflow if >= 4g (32bit) 2013-08-06 13:37:42 +02:00
freeseg cleanup: drop unneeded included header files 2012-08-23 14:37:20 +02:00
label logging: classify log_debug messages 2013-01-07 22:30:29 +00:00
locking locking: unlock memory on error path 2013-07-08 14:02:49 +02:00
log cleanup: use compile time strlen 2013-07-31 15:24:45 +02:00
metadata thin: apply VG profile if creating a new thin pool 2013-08-06 11:42:40 +02:00
mirror config: add profile arg to find_config_tree_str 2013-07-02 15:19:09 +02:00
misc thin: add thin_repair and thin_dump options 2013-07-31 15:30:47 +02:00
mm config: add profile arg to find_config_tree_bool 2013-07-02 15:19:09 +02:00
properties lvm2app: Add thin and thin pool lv creation 2013-07-12 16:52:16 -05:00
raid config: add profile arg to find_config_tree_str 2013-07-02 15:19:09 +02:00
replicator cleanup: drop unneeded included header files 2012-08-23 14:37:20 +02:00
report reporting: tidy recent new fields 2013-07-19 01:30:02 +01:00
snapshot config: add profile arg to find_config_tree_str 2013-07-02 15:19:09 +02:00
striped Add activation/use_linear_target enabled by default. (prajnoha) 2011-11-28 20:37:51 +00:00
thin thin: metadata resize needs 1.9 version 2013-07-31 15:29:27 +02:00
unknown cleanup: drop unneeded included header files 2012-08-23 14:37:20 +02:00
uuid Revert the #include changes. Need to fix this at the #include site for now, and 2011-07-18 14:34:33 +00:00
zero cleanup: drop unneeded included header files 2012-08-23 14:37:20 +02:00
Makefile.in lib/properties: Common code for handling properties. 2013-07-12 16:52:16 -05:00