Re: [PATCH v4] tpm: Parse event log from TPM2 ACPI table
From: kbuild test robot
Date: Sat Aug 31 2019 - 13:16:28 EST
Hi Jordan,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on jss-tpmdd/next]
[cannot apply to v5.3-rc6 next-20190830]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Jordan-Hand/tpm-Parse-event-log-from-TPM2-ACPI-table/20190831-234702
base: git://git.infradead.org/users/jjs/linux-tpmdd next
config: x86_64-rhel (attached as .config)
compiler: gcc-7 (Debian 7.4.0-11) 7.4.0
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@xxxxxxxxx>
All errors (new ones prefixed by >>):
drivers/char/tpm/eventlog/acpi.c: In function 'tpm_read_log_acpi':
>> drivers/char/tpm/eventlog/acpi.c:96:21: error: 'tpm2_trailer' is a pointer; did you mean to use '->'?
len = tpm2_trailer.minimum_log_length;
^
->
drivers/char/tpm/eventlog/acpi.c:97:23: error: 'tpm2_trailer' is a pointer; did you mean to use '->'?
start = tpm2_trailer.log_address;
^
->
vim +96 drivers/char/tpm/eventlog/acpi.c
43
44 /* If an event log is present, the TPM2 ACPI table will contain the full
45 * trailer
46 */
47
48 /* read binary bios log */
49 int tpm_read_log_acpi(struct tpm_chip *chip)
50 {
51 struct acpi_table_header *buff;
52 struct acpi_tcpa *tcpa;
53 struct acpi_tpm2_trailer *tpm2_trailer;
54 acpi_status status;
55 void __iomem *virt;
56 u64 len, start;
57 int log_type;
58 struct tpm_bios_log *log;
59 bool is_tpm2 = chip->flags & TPM_CHIP_FLAG_TPM2;
60 acpi_string table_sig;
61
62 log = &chip->log;
63
64 /* Unfortuntely ACPI does not associate the event log with a specific
65 * TPM, like PPI. Thus all ACPI TPMs will read the same log.
66 */
67 if (!chip->acpi_dev_handle)
68 return -ENODEV;
69
70 /* Find TCPA or TPM2 entry in RSDT (ACPI_LOGICAL_ADDRESSING) */
71 table_sig = is_tpm2 ? ACPI_SIG_TPM2 : ACPI_SIG_TCPA;
72 status = acpi_get_table(table_sig, 1, &buff);
73
74 if (ACPI_FAILURE(status))
75 return -ENODEV;
76
77 if (!is_tpm2) {
78 tcpa = (struct acpi_tcpa *)buff;
79 switch (tcpa->platform_class) {
80 case BIOS_SERVER:
81 len = tcpa->server.log_max_len;
82 start = tcpa->server.log_start_addr;
83 break;
84 case BIOS_CLIENT:
85 default:
86 len = tcpa->client.log_max_len;
87 start = tcpa->client.log_start_addr;
88 break;
89 }
90 log_type = EFI_TCG2_EVENT_LOG_FORMAT_TCG_1_2;
91 } else if (buff->length ==
92 sizeof(struct acpi_table_tpm2) +
93 sizeof(struct acpi_tpm2_trailer)) {
94 tpm2_trailer = (struct acpi_tpm2_trailer *)buff;
95
> 96 len = tpm2_trailer.minimum_log_length;
97 start = tpm2_trailer.log_address;
98 log_type = EFI_TCG2_EVENT_LOG_FORMAT_TCG_2;
99 } else {
100 return -ENODEV;
101 }
102
103 if (!len) {
104 dev_warn(&chip->dev, "%s: %s log area empty\n",
105 __func__, table_sig);
106 return -EIO;
107 }
108
109 /* malloc EventLog space */
110 log->bios_event_log = kmalloc(len, GFP_KERNEL);
111 if (!log->bios_event_log)
112 return -ENOMEM;
113
114 log->bios_event_log_end = log->bios_event_log + len;
115
116 virt = acpi_os_map_iomem(start, len);
117 if (!virt)
118 goto err;
119
120 memcpy_fromio(log->bios_event_log, virt, len);
121
122 acpi_os_unmap_iomem(virt, len);
123 return log_type;
124
125 err:
126 kfree(log->bios_event_log);
127 log->bios_event_log = NULL;
128 return -EIO;
129
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
Attachment:
.config.gz
Description: application/gzip