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; _