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