Commit 5e976d55 authored by Kylene Hall's avatar Kylene Hall Committed by Linus Torvalds

[PATCH] tpm: locking fixes

Add a missing lock in the register hardware and fix a misplaced lock release
release.
Signed-off-by: default avatarKylene Hall <kjhall@us.ibm.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent d9e5b6bf
...@@ -447,15 +447,15 @@ EXPORT_SYMBOL_GPL(tpm_open); ...@@ -447,15 +447,15 @@ EXPORT_SYMBOL_GPL(tpm_open);
int tpm_release(struct inode *inode, struct file *file) int tpm_release(struct inode *inode, struct file *file)
{ {
struct tpm_chip *chip = file->private_data; struct tpm_chip *chip = file->private_data;
file->private_data = NULL;
spin_lock(&driver_lock); spin_lock(&driver_lock);
file->private_data = NULL;
chip->num_opens--; chip->num_opens--;
del_singleshot_timer_sync(&chip->user_read_timer); del_singleshot_timer_sync(&chip->user_read_timer);
atomic_set(&chip->data_pending, 0); atomic_set(&chip->data_pending, 0);
pci_dev_put(chip->pci_dev); pci_dev_put(chip->pci_dev);
kfree(chip->data_buffer);
spin_unlock(&driver_lock);
return 0; return 0;
} }
...@@ -665,10 +665,14 @@ int tpm_register_hardware(struct pci_dev *pci_dev, ...@@ -665,10 +665,14 @@ int tpm_register_hardware(struct pci_dev *pci_dev,
return -ENODEV; return -ENODEV;
} }
spin_lock(&driver_lock);
pci_set_drvdata(pci_dev, chip); pci_set_drvdata(pci_dev, chip);
list_add(&chip->list, &tpm_chip_list); list_add(&chip->list, &tpm_chip_list);
spin_unlock(&driver_lock);
sysfs_create_group(&pci_dev->dev.kobj, chip->vendor->attr_group); sysfs_create_group(&pci_dev->dev.kobj, chip->vendor->attr_group);
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment