| .. | .. |
|---|
| 90 | 90 | return -ENODEV; |
|---|
| 91 | 91 | |
|---|
| 92 | 92 | if (tbl->header.length < |
|---|
| 93 | | - sizeof(*tbl) + sizeof(struct acpi_tpm2_phy)) |
|---|
| 93 | + sizeof(*tbl) + sizeof(struct acpi_tpm2_phy)) { |
|---|
| 94 | + acpi_put_table((struct acpi_table_header *)tbl); |
|---|
| 94 | 95 | return -ENODEV; |
|---|
| 96 | + } |
|---|
| 95 | 97 | |
|---|
| 96 | 98 | tpm2_phy = (void *)tbl + sizeof(*tbl); |
|---|
| 97 | 99 | len = tpm2_phy->log_area_minimum_length; |
|---|
| 98 | 100 | |
|---|
| 99 | 101 | start = tpm2_phy->log_area_start_address; |
|---|
| 100 | | - if (!start || !len) |
|---|
| 102 | + if (!start || !len) { |
|---|
| 103 | + acpi_put_table((struct acpi_table_header *)tbl); |
|---|
| 101 | 104 | return -ENODEV; |
|---|
| 105 | + } |
|---|
| 102 | 106 | |
|---|
| 107 | + acpi_put_table((struct acpi_table_header *)tbl); |
|---|
| 103 | 108 | format = EFI_TCG2_EVENT_LOG_FORMAT_TCG_2; |
|---|
| 104 | 109 | } else { |
|---|
| 105 | 110 | /* Find TCPA entry in RSDT (ACPI_LOGICAL_ADDRESSING) */ |
|---|
| .. | .. |
|---|
| 120 | 125 | break; |
|---|
| 121 | 126 | } |
|---|
| 122 | 127 | |
|---|
| 128 | + acpi_put_table((struct acpi_table_header *)buff); |
|---|
| 123 | 129 | format = EFI_TCG2_EVENT_LOG_FORMAT_TCG_1_2; |
|---|
| 124 | 130 | } |
|---|
| 131 | + |
|---|
| 125 | 132 | if (!len) { |
|---|
| 126 | 133 | dev_warn(&chip->dev, "%s: TCPA log area empty\n", __func__); |
|---|
| 127 | 134 | return -EIO; |
|---|
| .. | .. |
|---|
| 136 | 143 | |
|---|
| 137 | 144 | ret = -EIO; |
|---|
| 138 | 145 | virt = acpi_os_map_iomem(start, len); |
|---|
| 139 | | - if (!virt) |
|---|
| 146 | + if (!virt) { |
|---|
| 147 | + dev_warn(&chip->dev, "%s: Failed to map ACPI memory\n", __func__); |
|---|
| 148 | + /* try EFI log next */ |
|---|
| 149 | + ret = -ENODEV; |
|---|
| 140 | 150 | goto err; |
|---|
| 151 | + } |
|---|
| 141 | 152 | |
|---|
| 142 | 153 | memcpy_fromio(log->bios_event_log, virt, len); |
|---|
| 143 | 154 | |
|---|
| .. | .. |
|---|
| 156 | 167 | kfree(log->bios_event_log); |
|---|
| 157 | 168 | log->bios_event_log = NULL; |
|---|
| 158 | 169 | return ret; |
|---|
| 159 | | - |
|---|
| 160 | 170 | } |
|---|