[devmapper] Check mapname length
authorChristophe Varoqui <root@xa-s05.(none)>
Fri, 9 Dec 2005 15:54:48 +0000 (16:54 +0100)
committerChristophe Varoqui <root@xa-s05.(none)>
Fri, 9 Dec 2005 15:54:48 +0000 (16:54 +0100)
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@suse.de>
kpartx/devmapper.c
libmultipath/devmapper.c

index c4321b1..84b6c72 100644 (file)
@@ -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;
index 0955fec..913c3dd 100644 (file)
@@ -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: