[lvm-devel] master - pvmove: check return value of top_level_lv_name()

Zdenek Kabelac zkabelac at sourceware.org
Fri Sep 11 19:53:46 UTC 2020


Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=d71199920fe3a43582c0f2ca629ad502cfb189b5
Commit:        d71199920fe3a43582c0f2ca629ad502cfb189b5
Parent:        c38c4d9d36d765bbbe839c00b9580f6b1b8a0ef4
Author:        Wu Guanghao <wuguanghao3 at huawei.com>
AuthorDate:    Fri Sep 11 17:40:09 2020 +0800
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Fri Sep 11 21:43:08 2020 +0200

pvmove: check return value of top_level_lv_name()

The return value of top_level_lv_name() may be NULL, so we should
check return value of top_level_lv_name before calling
strcmp(lv->name, top_level_lv_name(vg, lv_name)).

Signed-off-by: Wu Guanghao <wuguanghao3 at huawei.com>
Signed-off-by: Zhiqiang Liu <liuzhiqiang26 at huawei.com>
---
 tools/pvmove.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/tools/pvmove.c b/tools/pvmove.c
index cc512b9de..da635a662 100644
--- a/tools/pvmove.c
+++ b/tools/pvmove.c
@@ -326,6 +326,7 @@ static struct logical_volume *_set_up_pvmove_lv(struct cmd_context *cmd,
 	int lv_skipped = 0;
 	int needs_exclusive = *exclusive;
 	const struct logical_volume *holder;
+	const char *new_lv_name;
 
 	/* FIXME Cope with non-contiguous => splitting existing segments */
 	if (!(lv_mirr = lv_create_empty("pvmove%d", NULL,
@@ -363,8 +364,13 @@ static struct logical_volume *_set_up_pvmove_lv(struct cmd_context *cmd,
 		if (lv == lv_mirr)
 			continue;
 
-		if (lv_name && strcmp(lv->name, top_level_lv_name(vg, lv_name)))
-			continue;
+		if (lv_name) {
+			if (!(new_lv_name = top_level_lv_name(vg, lv_name)))
+				return_NULL;
+
+			if (strcmp(lv->name, new_lv_name))
+				continue;
+		}
 
 		if (!lv_is_on_pvs(lv, source_pvl))
 			continue;




More information about the lvm-devel mailing list