Browse Source

[PATCH] tpm: fix misc name memory problem

I was using invalid memory for the miscdevice.name.  This patch fixes the
problem which was manifested by an ugly entry in /proc/misc.

Signed-off-by: Kylene Hall <kjhall@us.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Kylene Jo Hall 20 years ago
parent
commit
6f9beccb95
1 changed files with 6 additions and 2 deletions
  1. 6 2
      drivers/char/tpm/tpm.c

+ 6 - 2
drivers/char/tpm/tpm.c

@@ -464,6 +464,7 @@ void __devexit tpm_remove(struct pci_dev *pci_dev)
 
 
 	pci_set_drvdata(pci_dev, NULL);
 	pci_set_drvdata(pci_dev, NULL);
 	misc_deregister(&chip->vendor->miscdev);
 	misc_deregister(&chip->vendor->miscdev);
+	kfree(&chip->vendor->miscdev.name);
 
 
 	sysfs_remove_group(&pci_dev->dev.kobj, chip->vendor->attr_group);
 	sysfs_remove_group(&pci_dev->dev.kobj, chip->vendor->attr_group);
 
 
@@ -526,7 +527,9 @@ EXPORT_SYMBOL_GPL(tpm_pm_resume);
 int tpm_register_hardware(struct pci_dev *pci_dev,
 int tpm_register_hardware(struct pci_dev *pci_dev,
 			  struct tpm_vendor_specific *entry)
 			  struct tpm_vendor_specific *entry)
 {
 {
-	char devname[7];
+#define DEVNAME_SIZE 7
+
+	char *devname;
 	struct tpm_chip *chip;
 	struct tpm_chip *chip;
 	int i, j;
 	int i, j;
 
 
@@ -569,7 +572,8 @@ dev_num_search_complete:
 	else
 	else
 		chip->vendor->miscdev.minor = MISC_DYNAMIC_MINOR;
 		chip->vendor->miscdev.minor = MISC_DYNAMIC_MINOR;
 
 
-	snprintf(devname, sizeof(devname), "%s%d", "tpm", chip->dev_num);
+	devname = kmalloc(DEVNAME_SIZE, GFP_KERNEL);
+	scnprintf(devname, DEVNAME_SIZE, "%s%d", "tpm", chip->dev_num);
 	chip->vendor->miscdev.name = devname;
 	chip->vendor->miscdev.name = devname;
 
 
 	chip->vendor->miscdev.dev = &(pci_dev->dev);
 	chip->vendor->miscdev.dev = &(pci_dev->dev);