[lvm-devel] master - coverity: make sure segtype pointer is valid

Zdenek Kabelac zkabelac at sourceware.org
Thu Mar 16 00:02:44 UTC 2017


Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=e3a51537c57f8ebe2ecb49f3d221710cd59163ae
Commit:        e3a51537c57f8ebe2ecb49f3d221710cd59163ae
Parent:        42b970d4f34a0cf70ac07d551852cbd7b924079f
Author:        Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate:    Thu Mar 16 00:46:48 2017 +0100
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Thu Mar 16 01:02:10 2017 +0100

coverity: make sure segtype pointer is valid

---
 lib/metadata/raid_manip.c |    6 +++---
 tools/lvconvert.c         |    3 ++-
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/lib/metadata/raid_manip.c b/lib/metadata/raid_manip.c
index b2ea241..9f0de4c 100644
--- a/lib/metadata/raid_manip.c
+++ b/lib/metadata/raid_manip.c
@@ -1023,6 +1023,7 @@ static int _alloc_image_components(struct logical_volume *lv,
 	struct alloc_handle *ah = NULL;
 	struct dm_list *parallel_areas;
 	struct lv_list *lvl_array;
+	const char *raid_segtype;
 
 	if (!(lvl_array = dm_pool_alloc(lv->vg->vgmem,
 					sizeof(*lvl_array) * count * 2)))
@@ -1036,9 +1037,8 @@ static int _alloc_image_components(struct logical_volume *lv,
 	else
 		region_size = seg->region_size;
 
-	if (seg_is_raid(seg))
-		segtype = get_segtype_from_string(lv->vg->cmd, SEG_TYPE_NAME_RAID0_META);
-	else if (!(segtype = get_segtype_from_string(lv->vg->cmd, SEG_TYPE_NAME_RAID1)))
+	raid_segtype = seg_is_raid(seg) ? SEG_TYPE_NAME_RAID0_META : SEG_TYPE_NAME_RAID1;
+	if (!(segtype = get_segtype_from_string(lv->vg->cmd, raid_segtype)))
 		return_0;
 
 	/*
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
index 41d32df..a37dc25 100644
--- a/tools/lvconvert.c
+++ b/tools/lvconvert.c
@@ -2704,7 +2704,8 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
 
 	pool_segtype = get_segtype_from_string(cmd, str_seg_type);
 
-	if (!pool_segtype->ops->target_present(cmd, NULL, &target_attr)) {
+	if (!pool_segtype ||
+	    !pool_segtype->ops->target_present(cmd, NULL, &target_attr)) {
 		log_error("%s: Required device-mapper target(s) not detected in your kernel.",
 			  pool_segtype->name);
 		return 0;




More information about the lvm-devel mailing list