[PATCH] Check for mapname length

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Christophe,

you asked for it:
This patch checks whether the mapname returned by dm_task_get_name is
not zero-sized. So NULL is returned always for an invalid mapname.

Cheers,

Hannes
-- 
Dr. Hannes Reinecke			hare@xxxxxxx
SuSE Linux Products GmbH		S390 & zSeries
Maxfeldstraße 5				+49 911 74053 688
90409 Nürnberg				http://www.suse.de
[devmapper] Check mapname length

dm_task_get_name might return a zero-length string, which also
seem to indicate an invalid mapname. Fix dm_mapname() to always
return NULL if either no mapname or an zero-length mapname
was returned.

Signed-off-by: Hannes Reinecke <hare@xxxxxxx>

diff --git a/kpartx/devmapper.c b/kpartx/devmapper.c
--- a/kpartx/devmapper.c
+++ b/kpartx/devmapper.c
@@ -123,7 +123,7 @@ const char *
 dm_mapname(int major, int minor)
 {
 	struct dm_task *dmt;
-	const char *mapname;
+	const char *mapname = NULL, *map;
 
 	if (!(dmt = dm_task_create(DM_DEVICE_INFO)))
 		return NULL;
@@ -135,7 +135,10 @@ dm_mapname(int major, int minor)
 	if (!dm_task_run(dmt))
 		goto out;
 
-	mapname = strdup(dm_task_get_name(dmt));
+	map = dm_task_get_name(dmt);
+	if (map && strlen(map))
+		mapname = strdup(map);
+
 out:
 	dm_task_destroy(dmt);
 	return mapname;
diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c
--- a/libmultipath/devmapper.c
+++ b/libmultipath/devmapper.c
@@ -675,7 +675,7 @@ out:
 char *
 dm_mapname(int major, int minor)
 {
-	char * response;
+	char * response = NULL, *map;
 	struct dm_task *dmt;
 	int r;
 	int loop = MAX_WAIT * LOOPS_PER_SEC;
@@ -709,7 +709,10 @@ dm_mapname(int major, int minor)
 		goto bad;
 	}
 
-	response = STRDUP((char *)dm_task_get_name(dmt));
+	map = dm_task_get_name(dmt);
+	if (map && strlen(map))
+		response = STRDUP((char *)dm_task_get_name(dmt));
+
 	dm_task_destroy(dmt);
 	return response;
 bad:
--

dm-devel@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/dm-devel

[Index of Archives]     [DM Crypt]     [Fedora Desktop]     [ATA RAID]     [Fedora Marketing]     [Fedora Packaging]     [Fedora SELinux]     [Yosemite Discussion]     [KDE Users]     [Fedora Docs]

  Powered by Linux