Skip to contentSkip to conversation

Check for mapname length

PATCH New Hannes Reinecke 1 participant 1 message Dec 9, 2005 Device mapper

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Check for mapname length

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

Signature · 4 lines
Dr. Hannes Reinecke			[email protected]
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.

kpartx/devmapper.c +5 -2
@@ -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;
libmultipath/devmapper.c +5 -2
@@ -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: