[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v3 1/2] acpi: Make TPM version configurable.


  • To: Jan Beulich <jbeulich@xxxxxxxx>
  • From: Jennifer Herbert <jennifer.herbert@xxxxxxxxxx>
  • Date: Tue, 2 May 2023 23:40:15 +0100
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=mlq3SnBA/2XciEPKI0qXHiISzju/CjJhWkRkawbwRwk=; b=E2eu+u4eIq+fS6OWReydzqs0MUv63TkR3RXJMMVqVsmO7lOdqE+P+DWiYjXVtLapLs12ZrwNpF1VgSvnmEMMLUzswUTECLWpApnFEVF8CmuZv8SWMiFY4jLA/8ZcYCX32CUsNn6k+jPRGXjn4VIDThWV0RsWSskrRi9xzDpqsp6aZZQh3sZC2bDhwsfHOQR//q8fO78snhzhaX5UxglrTj2Od1PISUTWTnHW66rSVwu9ynlwFCxUpGpU/FHbpJMFn+Mkwi6dxUWviYI8mDmmGZm0hF6W2ydbkBJoC6GZAtIsNJ8nzOCFxElX6ZWfJKrsgmxSUHXvFCHrdfta8rq4/A==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FhynCaDbmxKP3i5Gsz3FwyM3xKKVa562v2Ee/d8QYLd0md19dchnifKlm9R2WOqMBEJLdUbVMXkbLC/O260MjJtMdmkZXwTLvi3aCiVZsqD2J/GSNeKaIgDKAJlXefMnEI3G+3v6hRJseHPn8bY6m46dhXBOMLJD38gg3ZnYcNyT48WSGotQcYwzOJwpZfS+k81/XIgBBWwcp3xYEaUX2vrTaky/J6ICl6LsyJ11mFD4inW2AkfTBXpCB9zbVWkztsLGNKC6aoz78PFnETApQ06kuD2nrra/Eow0/lEd/IGmcvDazF0gqIvSjnn0GHt/RoQgHfk8yPManXy7EV1XJA==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
  • Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • Delivery-date: Tue, 02 May 2023 22:41:00 +0000
  • Ironport-data: A9a23:3ILQr66FAqk+9ypsawsoVAxRtCPGchMFZxGqfqrLsTDasY5as4F+v mNJDzyHO/3ZNDP8eYhza9vj9kxXu8DQxtBjSQM6pSgxHi5G8cbLO4+Ufxz6V8+wwm8vb2o8t plDNYOQRCwQZiWBzvt4GuG59RGQ7YnRGvynTraCYnsrLeNdYH9JoQp5nOIkiZJfj9G8Agec0 fv/uMSaM1K+s9JOGjt8B5mr9VU+7ZwehBtC5gZlPa0T5geF/5UoJMl3yZ+ZfiOQrrZ8RoZWd 86bpJml82XQ+QsaC9/Nut4XpWVTH9Y+lSDX4pZnc/DKbipq/0Te4Y5iXBYoUm9Fii3hojxE4 I4lWapc6+seFvakdOw1C3G0GszlVEFM0OevzXOX6aR/w6BaGpdFLjoH4EweZOUlFuhL7W5m7 O4TDjQQdUm/rsWx7OyFEtYyupsCFZy+VG8fkikIITDxK98DGMqGb4CUoNhS0XE3m9xEGuvYa 4wBcz1zYR/cYhpJfFAKFJY5m+TujX76G9FagAvN+exrvC6OnUooj+WF3Nn9I7RmQe1Xk0Cep 2zL5SL5DwsQOcaD4TGE7mitlqnEmiaTtIc6TeXmqqYy3gHIroAVIBJOCFaGk/mBsHajXPYCd UsvpRE37pFnoSRHSfG4BXVUukWsvBQRRt5RGO0S8xyWx+zf5APxLngJSHtNZcIrsOcyRCc2z RmZktXxHzttvbaJD3WH+d+pQSiaPCEUKSoOYHECRA5cud37+ths01TIU8ppF7OzgpvtAzbsz juWrS84wbIOkcoM0Kb99lfC696xmqX0oscOzl2/dgqYAslRPeZJu6TABYDn0Mt9
  • Ironport-hdrordr: A9a23:EeK/za7YLSgKAYek3QPXwOTXdLJyesId70hD6qkXc3Bom62j+P xG+c5x6faaslgssR0b+OxoWpPwIk80hKQU3WB5B97LNmTbUQCTXeNfBOXZslvdMhy72ulB1b pxN4hSYeeAdGSSVPyKhDVQxexQp+Wv+qauguvV0ndqSgFmApsQijtENg==
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>


On 02/05/2023 12:54, Jan Beulich wrote:
On 25.04.2023 19:47, Jennifer Herbert wrote:
This patch makes the TPM version, for which the ACPI libary probes, 
configurable.
If acpi_config.tpm_verison is set to 1, it indicates that 1.2 (TCPA) should be 
probed.
I have also added to hvmloader an option to allow setting this new config, 
which can
be triggered by setting the platform/tpm_version xenstore key.

Signed-off-by: Jennifer Herbert <jennifer.herbert@xxxxxxxxxx>
---
  docs/misc/xenstore-paths.pandoc |  9 +++++
  tools/firmware/hvmloader/util.c | 19 ++++++---
  tools/libacpi/build.c           | 69 +++++++++++++++++++--------------
  tools/libacpi/libacpi.h         |  3 +-
  4 files changed, 64 insertions(+), 36 deletions(-)
Please can you get used to providing a brief rev log somewhere here?

Yes, ok.

--- a/tools/firmware/hvmloader/util.c
+++ b/tools/firmware/hvmloader/util.c
@@ -994,13 +994,22 @@ void hvmloader_acpi_build_tables(struct acpi_config 
*config,
      if ( !strncmp(xenstore_read("platform/acpi_laptop_slate", "0"), "1", 1)  )
          config->table_flags |= ACPI_HAS_SSDT_LAPTOP_SLATE;
- config->table_flags |= (ACPI_HAS_TCPA | ACPI_HAS_IOAPIC |
-                            ACPI_HAS_WAET | ACPI_HAS_PMTIMER |
-                            ACPI_HAS_BUTTONS | ACPI_HAS_VGA |
-                            ACPI_HAS_8042 | ACPI_HAS_CMOS_RTC);
+    config->table_flags |= (ACPI_HAS_IOAPIC | ACPI_HAS_WAET |
+                            ACPI_HAS_PMTIMER | ACPI_HAS_BUTTONS |
+                            ACPI_HAS_VGA | ACPI_HAS_8042 |
+                            ACPI_HAS_CMOS_RTC);
      config->acpi_revision = 4;
- config->tis_hdr = (uint16_t *)ACPI_TIS_HDR_ADDRESS;
+    s = xenstore_read("platform/tpm_version", "1");
+    config->tpm_version = strtoll(s, NULL, 0);
Due to field width, someone specifying 257 will also get a 1.2 TPM,
if I'm not mistaken.

Seems likely.   And i few other wacky values would give you 1.2 as well I'd think.   There could also be trailing junk on the version number.

I was a bit phased by the lack of any real error cases in hvmloader_acpi_build_tables.  It seemed the approch was if you put in junk, you'll get something, but possibly not what your expecting.

Do I take it you'd prefer it to only accept a strict '1' for 1.2 and any other value would result in no TPM being probed?  Or is it only the overflow cases your concerned about?


+    switch( config->tpm_version )
Nit: Style (missing blank).
yup
--- a/tools/libacpi/build.c
+++ b/tools/libacpi/build.c
@@ -409,38 +409,47 @@ static int construct_secondary_tables(struct acpi_ctxt 
*ctxt,
          memcpy(ssdt, ssdt_laptop_slate, sizeof(ssdt_laptop_slate));
          table_ptrs[nr_tables++] = ctxt->mem_ops.v2p(ctxt, ssdt);
      }
-
-    /* TPM TCPA and SSDT. */
-    if ( (config->table_flags & ACPI_HAS_TCPA) &&
-         (config->tis_hdr[0] != 0 && config->tis_hdr[0] != 0xffff) &&
-         (config->tis_hdr[1] != 0 && config->tis_hdr[1] != 0xffff) )
+    /* TPM and its SSDT. */
+    if ( config->table_flags & ACPI_HAS_TPM )
      {
-        ssdt = ctxt->mem_ops.alloc(ctxt, sizeof(ssdt_tpm), 16);
-        if (!ssdt) return -1;
-        memcpy(ssdt, ssdt_tpm, sizeof(ssdt_tpm));
-        table_ptrs[nr_tables++] = ctxt->mem_ops.v2p(ctxt, ssdt);
-
-        tcpa = ctxt->mem_ops.alloc(ctxt, sizeof(struct acpi_20_tcpa), 16);
-        if (!tcpa) return -1;
-        memset(tcpa, 0, sizeof(*tcpa));
-        table_ptrs[nr_tables++] = ctxt->mem_ops.v2p(ctxt, tcpa);
-
-        tcpa->header.signature = ACPI_2_0_TCPA_SIGNATURE;
-        tcpa->header.length    = sizeof(*tcpa);
-        tcpa->header.revision  = ACPI_2_0_TCPA_REVISION;
-        fixed_strcpy(tcpa->header.oem_id, ACPI_OEM_ID);
-        fixed_strcpy(tcpa->header.oem_table_id, ACPI_OEM_TABLE_ID);
-        tcpa->header.oem_revision = ACPI_OEM_REVISION;
-        tcpa->header.creator_id   = ACPI_CREATOR_ID;
-        tcpa->header.creator_revision = ACPI_CREATOR_REVISION;
-        if ( (lasa = ctxt->mem_ops.alloc(ctxt, ACPI_2_0_TCPA_LAML_SIZE, 16)) 
!= NULL )
+        switch ( config->tpm_version )
          {
-            tcpa->lasa = ctxt->mem_ops.v2p(ctxt, lasa);
-            tcpa->laml = ACPI_2_0_TCPA_LAML_SIZE;
-            memset(lasa, 0, tcpa->laml);
-            set_checksum(tcpa,
-                         offsetof(struct acpi_header, checksum),
-                         tcpa->header.length);
+        case 0: /* Assume legacy code wanted tpm 1.2 */
Along the lines of what Jason said: Unless this is known to be needed for
anything, I'd prefer if it was omitted.

I'm not awair of anything, but your comment 2 lines down  from version 2 made me think you knew of some.  So if your happy with me removing this line, I am!


Jan



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.