[PATCH] tpm: locking fixes
authorKylene Hall <kjhall@us.ibm.com>
Fri, 24 Jun 2005 05:02:03 +0000 (22:02 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Fri, 24 Jun 2005 07:05:26 +0000 (00:05 -0700)
Add a missing lock in the register hardware and fix a misplaced lock release
release.

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>
drivers/char/tpm/tpm.c

index e7c1dedfe448dd3492f50fb88e4b05f899547e64..c6d985b04b6ded2dedfac93a8d0af19c10e7cdd1 100644 (file)
@@ -447,15 +447,15 @@ EXPORT_SYMBOL_GPL(tpm_open);
 int tpm_release(struct inode *inode, struct file *file)
 {
        struct tpm_chip *chip = file->private_data;
-       
-       file->private_data = NULL;
 
        spin_lock(&driver_lock);
+       file->private_data = NULL;
        chip->num_opens--;
        del_singleshot_timer_sync(&chip->user_read_timer);
        atomic_set(&chip->data_pending, 0);
-
        pci_dev_put(chip->pci_dev);
+       kfree(chip->data_buffer);
+       spin_unlock(&driver_lock);
        return 0;
 }
 
@@ -665,10 +665,14 @@ dev_num_search_complete:
                return -ENODEV;
        }
 
+       spin_lock(&driver_lock);
+
        pci_set_drvdata(pci_dev, chip);
 
        list_add(&chip->list, &tpm_chip_list);
 
+       spin_unlock(&driver_lock);
+
        sysfs_create_group(&pci_dev->dev.kobj, chip->vendor->attr_group);
 
        return 0;