hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/char/tpm/tpm_crb.c
....@@ -252,7 +252,7 @@
252252 iowrite32(CRB_LOC_CTRL_RELINQUISH, &priv->regs_h->loc_ctrl);
253253 if (!crb_wait_for_reg_32(&priv->regs_h->loc_state, mask, value,
254254 TPM2_TIMEOUT_C)) {
255
- dev_warn(dev, "TPM_LOC_STATE_x.requestAccess timed out\n");
255
+ dev_warn(dev, "TPM_LOC_STATE_x.Relinquish timed out\n");
256256 return -ETIME;
257257 }
258258
....@@ -676,12 +676,16 @@
676676
677677 /* Should the FIFO driver handle this? */
678678 sm = buf->start_method;
679
- if (sm == ACPI_TPM2_MEMORY_MAPPED)
680
- return -ENODEV;
679
+ if (sm == ACPI_TPM2_MEMORY_MAPPED) {
680
+ rc = -ENODEV;
681
+ goto out;
682
+ }
681683
682684 priv = devm_kzalloc(dev, sizeof(struct crb_priv), GFP_KERNEL);
683
- if (!priv)
684
- return -ENOMEM;
685
+ if (!priv) {
686
+ rc = -ENOMEM;
687
+ goto out;
688
+ }
685689
686690 if (sm == ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC) {
687691 if (buf->header.length < (sizeof(*buf) + sizeof(*crb_smc))) {
....@@ -689,7 +693,8 @@
689693 FW_BUG "TPM2 ACPI table has wrong size %u for start method type %d\n",
690694 buf->header.length,
691695 ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC);
692
- return -EINVAL;
696
+ rc = -EINVAL;
697
+ goto out;
693698 }
694699 crb_smc = ACPI_ADD_PTR(struct tpm2_crb_smc, buf, sizeof(*buf));
695700 priv->smc_func_id = crb_smc->smc_func_id;
....@@ -700,17 +705,23 @@
700705
701706 rc = crb_map_io(device, priv, buf);
702707 if (rc)
703
- return rc;
708
+ goto out;
704709
705710 chip = tpmm_chip_alloc(dev, &tpm_crb);
706
- if (IS_ERR(chip))
707
- return PTR_ERR(chip);
711
+ if (IS_ERR(chip)) {
712
+ rc = PTR_ERR(chip);
713
+ goto out;
714
+ }
708715
709716 dev_set_drvdata(&chip->dev, priv);
710717 chip->acpi_dev_handle = device->handle;
711718 chip->flags = TPM_CHIP_FLAG_TPM2;
712719
713
- return tpm_chip_register(chip);
720
+ rc = tpm_chip_register(chip);
721
+
722
+out:
723
+ acpi_put_table((struct acpi_table_header *)buf);
724
+ return rc;
714725 }
715726
716727 static int crb_acpi_remove(struct acpi_device *device)