[lvm-devel] master - lvmanip: uninitialized members in struct pv_list (#10)

Zdenek Kabelac zkabelac at sourceware.org
Fri Dec 14 14:23:53 UTC 2018


Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=859feb81e5b61ac2109b1d7850844ccf1ce3e5bf
Commit:        859feb81e5b61ac2109b1d7850844ccf1ce3e5bf
Parent:        db6d9e04af7277a5e2883743e0a9a1502d97249f
Author:        Ming-Hung Tsai <notifications at github.com>
AuthorDate:    Fri Dec 14 01:51:51 2018 -0800
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Fri Dec 14 15:23:18 2018 +0100

lvmanip:  uninitialized members in struct pv_list (#10)

Scenario: Given an existed LV `lvol0`, I want to create another LV
on the PVs used by `lvol0`.

I use `build_parallel_areas_from_lv()` to obtain the `pv_list` of each segments.
However, the returned `pv_list` is not properly initialized, which causes
segfault in subsequent operations.
---
 WHATS_NEW               |    1 +
 lib/metadata/lv_manip.c |    2 +-
 2 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/WHATS_NEW b/WHATS_NEW
index 6856d66..0b7f834 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
 Version 2.03.02 - 
 ===================================
+  Fix missing proper initialization of pv_list struct when adding pv.
   Fix (de)activation of RaidLVs with visible SubLVs
   Prohibit mirrored 'mirror' log via lvcreate and lvconvert
   Use sync io if async io_setup fails, or use_aio=0 is set in config.
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
index 2c569d8..27c40d7 100644
--- a/lib/metadata/lv_manip.c
+++ b/lib/metadata/lv_manip.c
@@ -5962,7 +5962,7 @@ static int _add_pvs(struct cmd_context *cmd, struct pv_segment *peg,
 	if (find_pv_in_pv_list(&spvs->pvs, peg->pv))
 		return 1;
 
-	if (!(pvl = dm_pool_alloc(cmd->mem, sizeof(*pvl)))) {
+	if (!(pvl = dm_pool_zalloc(cmd->mem, sizeof(*pvl)))) {
 		log_error("pv_list allocation failed");
 		return 0;
 	}




More information about the lvm-devel mailing list