Since disk_name() is used by bdevname(), we know that the target buffer has
size BDEVNAME_SIZE.  Enforce that with snprintf().



 fs/partitions/check.c |   15 ++++++++-------
 fs/partitions/check.h |    2 +-
 2 files changed, 9 insertions(+), 8 deletions(-)

diff -puN fs/partitions/check.c~disk_name-size-check fs/partitions/check.c
--- 25/fs/partitions/check.c~disk_name-size-check	2003-04-28 23:35:32.000000000 -0700
+++ 25-akpm/fs/partitions/check.c	2003-04-28 23:35:32.000000000 -0700
@@ -99,21 +99,22 @@ char *disk_name(struct gendisk *hd, int 
 #ifdef CONFIG_DEVFS_FS
 	if (hd->devfs_name[0] != '\0') {
 		if (part)
-			sprintf(buf, "%s/part%d", hd->devfs_name, part);
+			snprintf(buf, BDEVNAME_SIZE, "%s/part%d",
+					hd->devfs_name, part);
 		else if (hd->minors != 1)
-			sprintf(buf, "%s/disc", hd->devfs_name);
+			snprintf(buf, BDEVNAME_SIZE, "%s/disc", hd->devfs_name);
 		else
-			sprintf(buf, "%s", hd->devfs_name);
+			snprintf(buf, BDEVNAME_SIZE, "%s", hd->devfs_name);
 		return buf;
 	}
 #endif
 
 	if (!part)
-		sprintf(buf, "%s", hd->disk_name);
+		snprintf(buf, BDEVNAME_SIZE, "%s", hd->disk_name);
 	else if (isdigit(hd->disk_name[strlen(hd->disk_name)-1]))
-		sprintf(buf, "%sp%d", hd->disk_name, part);
+		snprintf(buf, BDEVNAME_SIZE, "%sp%d", hd->disk_name, part);
 	else
-		sprintf(buf, "%s%d", hd->disk_name, part);
+		snprintf(buf, BDEVNAME_SIZE, "%s%d", hd->disk_name, part);
 
 	return buf;
 }
@@ -417,7 +418,7 @@ void del_gendisk(struct gendisk *disk)
 struct dev_name {
 	struct list_head list;
 	dev_t dev;
-	char namebuf[64];
+	char namebuf[BDEVNAME_SIZE];
 	char *name;
 };
 
diff -puN fs/partitions/check.h~disk_name-size-check fs/partitions/check.h
--- 25/fs/partitions/check.h~disk_name-size-check	2003-04-28 23:35:32.000000000 -0700
+++ 25-akpm/fs/partitions/check.h	2003-04-28 23:35:32.000000000 -0700
@@ -8,7 +8,7 @@
 enum { MAX_PART = 256 };
 
 struct parsed_partitions {
-	char name[40];
+	char name[BDEVNAME_SIZE];
 	struct {
 		sector_t from;
 		sector_t size;

_