tpm: fix compat 'ppi' link handling in tpm_chip_register()
__compat_only_sysfs_link_entry_to_kobj() was unconditionally called for
TPM1 chips, which caused crash on Acer C720 laptop where DSM for the
ACPI object did not exist.
There are two reasons for unwanted behavior:
* The code did not check whether
__compat_only_sysfs_link_entry_to_kobj() returned -ENOENT. This is
OK. It just meanst that ppi is not available.
* The code did not clean up properly. Compat link should added only
after all other init is done.
This patch sorts out these issues.
Fixes: 9b774d5cf2
Reported-by: Jeremiah Mahler <jmmahler@gmail.com>
Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Tested-by: Jeremiah Mahler <jmmahler@gmail.com>
Acked-by: Peter Huewe <PeterHuewe@gmx.de>
This commit is contained in:
parent
2e31125c24
commit
d56e4f7534
1 changed files with 10 additions and 8 deletions
|
@ -226,14 +226,6 @@ int tpm_chip_register(struct tpm_chip *chip)
|
||||||
if (rc)
|
if (rc)
|
||||||
goto out_err;
|
goto out_err;
|
||||||
|
|
||||||
if (!(chip->flags & TPM_CHIP_FLAG_TPM2)) {
|
|
||||||
rc = __compat_only_sysfs_link_entry_to_kobj(&chip->pdev->kobj,
|
|
||||||
&chip->dev.kobj,
|
|
||||||
"ppi");
|
|
||||||
if (rc)
|
|
||||||
goto out_err;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Make the chip available. */
|
/* Make the chip available. */
|
||||||
spin_lock(&driver_lock);
|
spin_lock(&driver_lock);
|
||||||
list_add_tail_rcu(&chip->list, &tpm_chip_list);
|
list_add_tail_rcu(&chip->list, &tpm_chip_list);
|
||||||
|
@ -241,6 +233,16 @@ int tpm_chip_register(struct tpm_chip *chip)
|
||||||
|
|
||||||
chip->flags |= TPM_CHIP_FLAG_REGISTERED;
|
chip->flags |= TPM_CHIP_FLAG_REGISTERED;
|
||||||
|
|
||||||
|
if (!(chip->flags & TPM_CHIP_FLAG_TPM2)) {
|
||||||
|
rc = __compat_only_sysfs_link_entry_to_kobj(&chip->pdev->kobj,
|
||||||
|
&chip->dev.kobj,
|
||||||
|
"ppi");
|
||||||
|
if (rc && rc != -ENOENT) {
|
||||||
|
tpm_chip_unregister(chip);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
out_err:
|
out_err:
|
||||||
tpm1_chip_unregister(chip);
|
tpm1_chip_unregister(chip);
|
||||||
|
|
Loading…
Add table
Reference in a new issue