[dm-devel] [PATCH 5/6] Fix broken major:minor device handling

Benjamin Marzinski bmarzins at redhat.com
Thu Dec 11 22:11:40 UTC 2008


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 at redhat.com>
---
 libmultipath/discovery.c |    7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

Index: multipath-tools-081203/libmultipath/discovery.c
===================================================================
--- multipath-tools-081203.orig/libmultipath/discovery.c
+++ multipath-tools-081203/libmultipath/discovery.c
@@ -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;
 }
 




More information about the dm-devel mailing list