Fix broken major:minor device handling
authorBenjamin Marzinski <bmarzins@redhat.com>
Thu, 11 Dec 2008 22:11:40 +0000 (16:11 -0600)
committerChristophe Varoqui <christophe.varoqui@free.fr>
Thu, 11 Dec 2008 22:56:21 +0000 (23:56 +0100)
devt2devname was not actually setting devname, so multipath was not able to
do operate on devices using major:minor

This patch sets devname, and also checks for an unlikely buffer overrun.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
libmultipath/discovery.c

index bbb9f9b..9ae2b8f 100644 (file)
@@ -253,7 +253,11 @@ devt2devname (char *devname, char *devt)
                        continue;
 
                if ((major == tmpmaj) && (minor == tmpmin)) {
-                       sprintf(block_path, "/sys/block/%s", dev);
+                       if (snprintf(block_path, FILE_NAME_SIZE, "/sys/block/%s", dev) >= FILE_NAME_SIZE) {
+                               condlog(0, "device name %s is too long\n", dev);
+                               fclose(fd);
+                               return 1;
+                       }
                        break;
                }
        }
@@ -271,6 +275,7 @@ devt2devname (char *devname, char *devt)
                condlog(0, "sysfs entry %s is not a directory\n", block_path);
                return 1;
        }
+       basename(block_path, devname);
        return 0;
 }