[dm-devel] [PATCH] libmultipath, kpartx: fix callers of dm_get_next_target()
mwilck at suse.com
mwilck at suse.com
Tue May 31 10:24:45 UTC 2022
From: Martin Wilck <mwilck at suse.com>
dm_get_next_target() may return NULL for target_type and params
in some situations. Follows the same idea as the previous patch
"dm_get_map: fix segfault when can't found target" by Wu Guanghao.
Signed-off-by: Martin Wilck <mwilck at suse.com>
---
kpartx/devmapper.c | 6 ++++--
libmultipath/devmapper.c | 10 ++++++++++
2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/kpartx/devmapper.c b/kpartx/devmapper.c
index 49ffd31..bf14c78 100644
--- a/kpartx/devmapper.c
+++ b/kpartx/devmapper.c
@@ -412,8 +412,10 @@ dm_get_map(const char *mapname, char * outparams)
goto out;
/* Fetch 1st target */
- dm_get_next_target(dmt, NULL, &start, &length,
- &target_type, ¶ms);
+ if (dm_get_next_target(dmt, NULL, &start, &length,
+ &target_type, ¶ms) != NULL || !params)
+ /* more than one target or not found target */
+ goto out;
if (snprintf(outparams, PARAMS_SIZE, "%s", params) <= PARAMS_SIZE)
r = 0;
diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c
index 9819e29..1ada3fb 100644
--- a/libmultipath/devmapper.c
+++ b/libmultipath/devmapper.c
@@ -1715,6 +1715,16 @@ int dm_reassign_table(const char *name, char *old, char *new)
do {
next = dm_get_next_target(dmt, next, &start, &length,
&target, ¶ms);
+ if (!target || !params) {
+ /*
+ * We can't call dm_task_add_target() with
+ * invalid parameters. But simply dropping this
+ * target feels wrong, too. Abort and warn.
+ */
+ condlog(1, "%s: invalid target found in map %s",
+ __func__, name);
+ goto out_reload;
+ }
buff = strdup(params);
if (!buff) {
condlog(3, "%s: failed to replace target %s, "
--
2.36.1
More information about the dm-devel
mailing list