linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] TCG2 log support build fixes for non-x86_64
@ 2019-04-02 21:55 Matthew Garrett
  2019-04-02 21:55 ` [PATCH 1/2] efi: Fix cast to pointer from integer of different size in TPM log code Matthew Garrett
                   ` (3 more replies)
  0 siblings, 4 replies; 12+ messages in thread
From: Matthew Garrett @ 2019-04-02 21:55 UTC (permalink / raw)
  To: linux-integrity
  Cc: peterhuewe, jarkko.sakkinen, jgg, roberto.sassu, linux-efi,
	linux-security-module, linux-kernel, tweek

Couple of patches to fix ktest reported issues with the crypto-agile log
format support.



^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 1/2] efi: Fix cast to pointer from integer of different size in TPM log code
  2019-04-02 21:55 [PATCH] TCG2 log support build fixes for non-x86_64 Matthew Garrett
@ 2019-04-02 21:55 ` Matthew Garrett
  2019-04-03 13:42   ` David Laight
                     ` (2 more replies)
  2019-04-02 21:55 ` [PATCH 2/2] tpm: Fix builds on platforms that lack early_memremap() Matthew Garrett
                   ` (2 subsequent siblings)
  3 siblings, 3 replies; 12+ messages in thread
From: Matthew Garrett @ 2019-04-02 21:55 UTC (permalink / raw)
  To: linux-integrity
  Cc: peterhuewe, jarkko.sakkinen, jgg, roberto.sassu, linux-efi,
	linux-security-module, linux-kernel, tweek, Matthew Garrett,
	Matthew Garrett

8bfcff4a6a1d9d7226bb63a7da758b82d9ab4373 introduced a cast from
efi_physical_address_t to (void *), which are different sizes on 32-bit.
Fix that. Caught by the 0-day test bot.

Signed-off-by: Matthew Garrett <mjg59@google.com>
---
 drivers/firmware/efi/libstub/tpm.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/firmware/efi/libstub/tpm.c b/drivers/firmware/efi/libstub/tpm.c
index b6e93e14fcf1..6b3b507a54eb 100644
--- a/drivers/firmware/efi/libstub/tpm.c
+++ b/drivers/firmware/efi/libstub/tpm.c
@@ -114,8 +114,8 @@ void efi_retrieve_tpm2_eventlog(efi_system_table_t *sys_table_arg)
 			 */
 			last_entry_size =
 				__calc_tpm2_event_size((void *)last_entry_addr,
-						       (void *)log_location,
-						       false);
+						    (void *)(long)log_location,
+						    false);
 		} else {
 			last_entry_size = sizeof(struct tcpa_event) +
 			   ((struct tcpa_event *) last_entry_addr)->event_size;
-- 
2.21.0.392.gf8f6787159e-goog


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 2/2] tpm: Fix builds on platforms that lack early_memremap()
  2019-04-02 21:55 [PATCH] TCG2 log support build fixes for non-x86_64 Matthew Garrett
  2019-04-02 21:55 ` [PATCH 1/2] efi: Fix cast to pointer from integer of different size in TPM log code Matthew Garrett
@ 2019-04-02 21:55 ` Matthew Garrett
  2019-04-04 12:40   ` Jarkko Sakkinen
  2019-04-04 12:40 ` [PATCH] TCG2 log support build fixes for non-x86_64 Jarkko Sakkinen
  2019-04-15  8:47 ` Jarkko Sakkinen
  3 siblings, 1 reply; 12+ messages in thread
From: Matthew Garrett @ 2019-04-02 21:55 UTC (permalink / raw)
  To: linux-integrity
  Cc: peterhuewe, jarkko.sakkinen, jgg, roberto.sassu, linux-efi,
	linux-security-module, linux-kernel, tweek, Matthew Garrett,
	Matthew Garrett

On EFI systems, __calc_tpm2_event_size() needs to be able to map tables
at early boot time in order to extract information from them.
Unfortunately this interacts badly with other architectures that don't
provide the early_memremap() interface but which may still have other
mechanisms for obtaining crypto-agile logs. Abstract this away so we
can avoid the need for two implementations while still avoiding breakage
on architectures that don't require remapping of the table.

Signed-off-by: Matthew Garrett <mjg59@google.com>
---
 drivers/firmware/efi/tpm.c   |  3 +++
 include/linux/tpm_eventlog.h | 32 ++++++++++++++++++++------------
 2 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/drivers/firmware/efi/tpm.c b/drivers/firmware/efi/tpm.c
index f2a13cbb8688..fe48150f06d1 100644
--- a/drivers/firmware/efi/tpm.c
+++ b/drivers/firmware/efi/tpm.c
@@ -4,6 +4,9 @@
  *     Thiebaud Weksteen <tweek@google.com>
  */
 
+#define TPM_MEMREMAP(start, size) early_memremap(start, size)
+#define TPM_MEMUNMAP(start, size) early_memunmap(start, size)
+
 #include <linux/efi.h>
 #include <linux/init.h>
 #include <linux/memblock.h>
diff --git a/include/linux/tpm_eventlog.h b/include/linux/tpm_eventlog.h
index d889e12047d9..0ca27bc053af 100644
--- a/include/linux/tpm_eventlog.h
+++ b/include/linux/tpm_eventlog.h
@@ -128,6 +128,14 @@ struct tcg_algorithm_info {
 	struct tcg_algorithm_size digest_sizes[];
 };
 
+#ifndef TPM_MEMREMAP
+#define TPM_MEMREMAP(start, size) NULL
+#endif
+
+#ifndef TPM_MEMUNMAP
+#define TPM_MEMUNMAP(start, size) do{} while(0)
+#endif
+
 /**
  * __calc_tpm2_event_size - calculate the size of a TPM2 event log entry
  * @event:        Pointer to the event whose size should be calculated
@@ -171,8 +179,8 @@ static inline int __calc_tpm2_event_size(struct tcg_pcr_event2_head *event,
 	/* Map the event header */
 	if (do_mapping) {
 		mapping_size = marker - marker_start;
-		mapping = early_memremap((unsigned long)marker_start,
-					 mapping_size);
+		mapping = TPM_MEMREMAP((unsigned long)marker_start,
+				       mapping_size);
 		if (!mapping) {
 			size = 0;
 			goto out;
@@ -192,10 +200,10 @@ static inline int __calc_tpm2_event_size(struct tcg_pcr_event2_head *event,
 
 		/* Map the digest's algorithm identifier */
 		if (do_mapping) {
-			early_memunmap(mapping, mapping_size);
+			TPM_MEMUNMAP(mapping, mapping_size);
 			mapping_size = marker - marker_start + halg_size;
-			mapping = early_memremap((unsigned long)marker_start,
-						 mapping_size);
+			mapping = TPM_MEMREMAP((unsigned long)marker_start,
+					       mapping_size);
 			if (!mapping) {
 				size = 0;
 				goto out;
@@ -212,10 +220,10 @@ static inline int __calc_tpm2_event_size(struct tcg_pcr_event2_head *event,
 
 				/* Map the digest content itself */
 				if (do_mapping) {
-					early_memunmap(mapping, mapping_size);
+					TPM_MEMUNMAP(mapping, mapping_size);
 					mapping_size = marker - marker_start;
-					mapping = early_memremap((unsigned long)marker_start,
-						      mapping_size);
+					mapping = TPM_MEMREMAP((unsigned long)marker_start,
+							       mapping_size);
 					if (!mapping) {
 						size = 0;
 						goto out;
@@ -238,10 +246,10 @@ static inline int __calc_tpm2_event_size(struct tcg_pcr_event2_head *event,
 	 * we don't need to map it
 	 */
 	if (do_mapping) {
-		early_memunmap(marker_start, mapping_size);
+		TPM_MEMUNMAP(marker_start, mapping_size);
 		mapping_size += sizeof(event_field->event_size);
-		mapping = early_memremap((unsigned long)marker_start,
-					 mapping_size);
+		mapping = TPM_MEMREMAP((unsigned long)marker_start,
+				       mapping_size);
 		if (!mapping) {
 			size = 0;
 			goto out;
@@ -256,7 +264,7 @@ static inline int __calc_tpm2_event_size(struct tcg_pcr_event2_head *event,
 		size = 0;
 out:
 	if (do_mapping)
-		early_memunmap(mapping, mapping_size);
+		TPM_MEMUNMAP(mapping, mapping_size);
 	return size;
 }
 
-- 
2.21.0.392.gf8f6787159e-goog


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* RE: [PATCH 1/2] efi: Fix cast to pointer from integer of different size in TPM log code
  2019-04-02 21:55 ` [PATCH 1/2] efi: Fix cast to pointer from integer of different size in TPM log code Matthew Garrett
@ 2019-04-03 13:42   ` David Laight
  2019-04-03 16:51     ` Matthew Garrett
  2019-04-04 12:39   ` Jarkko Sakkinen
  2019-04-04 12:54   ` Ard Biesheuvel
  2 siblings, 1 reply; 12+ messages in thread
From: David Laight @ 2019-04-03 13:42 UTC (permalink / raw)
  To: 'Matthew Garrett', linux-integrity
  Cc: peterhuewe, jarkko.sakkinen, jgg, roberto.sassu, linux-efi,
	linux-security-module, linux-kernel, tweek, Matthew Garrett

From: Matthew Garrett
> Sent: 02 April 2019 22:56
> 
> 8bfcff4a6a1d9d7226bb63a7da758b82d9ab4373 introduced a cast from
> efi_physical_address_t to (void *), which are different sizes on 32-bit.
> Fix that. Caught by the 0-day test bot.

Casting a physical address to 'void *' seems completely wrong.
Also you'd need a guarantee that the address was below 4G or the result
is meaningless.
Looks to me like something is using the wrong types somewhere.

	David

> Signed-off-by: Matthew Garrett <mjg59@google.com>
> ---
>  drivers/firmware/efi/libstub/tpm.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/firmware/efi/libstub/tpm.c b/drivers/firmware/efi/libstub/tpm.c
> index b6e93e14fcf1..6b3b507a54eb 100644
> --- a/drivers/firmware/efi/libstub/tpm.c
> +++ b/drivers/firmware/efi/libstub/tpm.c
> @@ -114,8 +114,8 @@ void efi_retrieve_tpm2_eventlog(efi_system_table_t *sys_table_arg)
>  			 */
>  			last_entry_size =
>  				__calc_tpm2_event_size((void *)last_entry_addr,
> -						       (void *)log_location,
> -						       false);
> +						    (void *)(long)log_location,
> +						    false);
>  		} else {
>  			last_entry_size = sizeof(struct tcpa_event) +
>  			   ((struct tcpa_event *) last_entry_addr)->event_size;
> --
> 2.21.0.392.gf8f6787159e-goog

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/2] efi: Fix cast to pointer from integer of different size in TPM log code
  2019-04-03 13:42   ` David Laight
@ 2019-04-03 16:51     ` Matthew Garrett
  0 siblings, 0 replies; 12+ messages in thread
From: Matthew Garrett @ 2019-04-03 16:51 UTC (permalink / raw)
  To: David Laight
  Cc: linux-integrity, peterhuewe, jarkko.sakkinen, jgg, roberto.sassu,
	linux-efi, linux-security-module, linux-kernel, tweek

On Wed, Apr 3, 2019 at 6:41 AM David Laight <David.Laight@aculab.com> wrote:
>
> From: Matthew Garrett
> > Sent: 02 April 2019 22:56
> >
> > 8bfcff4a6a1d9d7226bb63a7da758b82d9ab4373 introduced a cast from
> > efi_physical_address_t to (void *), which are different sizes on 32-bit.
> > Fix that. Caught by the 0-day test bot.
>
> Casting a physical address to 'void *' seems completely wrong.
> Also you'd need a guarantee that the address was below 4G or the result
> is meaningless.
> Looks to me like something is using the wrong types somewhere.

We're in UEFI here, not the kernel proper - the firmware functions we
call give us back physical addresses, and we're operating with a 1:1
mapping. long is 64 bit on 64 bit systems, and on 32 bit systems we've
already asserted that all firmware resources are under 4GB (obviously
we're going to have a bad time if they're not, but there's not really
anything we can do about that)

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/2] efi: Fix cast to pointer from integer of different size in TPM log code
  2019-04-02 21:55 ` [PATCH 1/2] efi: Fix cast to pointer from integer of different size in TPM log code Matthew Garrett
  2019-04-03 13:42   ` David Laight
@ 2019-04-04 12:39   ` Jarkko Sakkinen
  2019-04-04 12:54   ` Ard Biesheuvel
  2 siblings, 0 replies; 12+ messages in thread
From: Jarkko Sakkinen @ 2019-04-04 12:39 UTC (permalink / raw)
  To: Matthew Garrett
  Cc: linux-integrity, peterhuewe, jgg, roberto.sassu, linux-efi,
	linux-security-module, linux-kernel, tweek, Matthew Garrett

On Tue, Apr 02, 2019 at 02:55:55PM -0700, Matthew Garrett wrote:
> 8bfcff4a6a1d9d7226bb63a7da758b82d9ab4373 introduced a cast from
> efi_physical_address_t to (void *), which are different sizes on 32-bit.
> Fix that. Caught by the 0-day test bot.
> 
> Signed-off-by: Matthew Garrett <mjg59@google.com>

Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>

/Jarkko

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 2/2] tpm: Fix builds on platforms that lack early_memremap()
  2019-04-02 21:55 ` [PATCH 2/2] tpm: Fix builds on platforms that lack early_memremap() Matthew Garrett
@ 2019-04-04 12:40   ` Jarkko Sakkinen
  0 siblings, 0 replies; 12+ messages in thread
From: Jarkko Sakkinen @ 2019-04-04 12:40 UTC (permalink / raw)
  To: Matthew Garrett
  Cc: linux-integrity, peterhuewe, jgg, roberto.sassu, linux-efi,
	linux-security-module, linux-kernel, tweek, Matthew Garrett

On Tue, Apr 02, 2019 at 02:55:56PM -0700, Matthew Garrett wrote:
> On EFI systems, __calc_tpm2_event_size() needs to be able to map tables
> at early boot time in order to extract information from them.
> Unfortunately this interacts badly with other architectures that don't
> provide the early_memremap() interface but which may still have other
> mechanisms for obtaining crypto-agile logs. Abstract this away so we
> can avoid the need for two implementations while still avoiding breakage
> on architectures that don't require remapping of the table.
> 
> Signed-off-by: Matthew Garrett <mjg59@google.com>

Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>

/Jarkko

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] TCG2 log support build fixes for non-x86_64
  2019-04-02 21:55 [PATCH] TCG2 log support build fixes for non-x86_64 Matthew Garrett
  2019-04-02 21:55 ` [PATCH 1/2] efi: Fix cast to pointer from integer of different size in TPM log code Matthew Garrett
  2019-04-02 21:55 ` [PATCH 2/2] tpm: Fix builds on platforms that lack early_memremap() Matthew Garrett
@ 2019-04-04 12:40 ` Jarkko Sakkinen
  2019-04-04 17:24   ` Matthew Garrett
  2019-04-15  8:47 ` Jarkko Sakkinen
  3 siblings, 1 reply; 12+ messages in thread
From: Jarkko Sakkinen @ 2019-04-04 12:40 UTC (permalink / raw)
  To: Matthew Garrett
  Cc: linux-integrity, peterhuewe, jgg, roberto.sassu, linux-efi,
	linux-security-module, linux-kernel, tweek

On Tue, Apr 02, 2019 at 02:55:54PM -0700, Matthew Garrett wrote:
> Couple of patches to fix ktest reported issues with the crypto-agile log
> format support.

I guess I squash these to your earlier commits?

/Jarkko

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/2] efi: Fix cast to pointer from integer of different size in TPM log code
  2019-04-02 21:55 ` [PATCH 1/2] efi: Fix cast to pointer from integer of different size in TPM log code Matthew Garrett
  2019-04-03 13:42   ` David Laight
  2019-04-04 12:39   ` Jarkko Sakkinen
@ 2019-04-04 12:54   ` Ard Biesheuvel
  2019-04-04 17:23     ` Matthew Garrett
  2 siblings, 1 reply; 12+ messages in thread
From: Ard Biesheuvel @ 2019-04-04 12:54 UTC (permalink / raw)
  To: Matthew Garrett
  Cc: linux-integrity, Peter Hüwe, Jarkko Sakkinen, jgg,
	Roberto Sassu, linux-efi, linux-security-module,
	Linux Kernel Mailing List, Thiebaud Weksteen, Matthew Garrett

On Wed, 3 Apr 2019 at 04:56, Matthew Garrett <matthewgarrett@google.com> wrote:
>
> 8bfcff4a6a1d9d7226bb63a7da758b82d9ab4373

Which tree is this commit in?

> introduced a cast from
> efi_physical_address_t to (void *), which are different sizes on 32-bit.
> Fix that. Caught by the 0-day test bot.
>
> Signed-off-by: Matthew Garrett <mjg59@google.com>

Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

I'll pick this up as a fix if we can clean up the commit log so it
doesn't refer to a commit that does not exist in mainline.

> ---
>  drivers/firmware/efi/libstub/tpm.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/firmware/efi/libstub/tpm.c b/drivers/firmware/efi/libstub/tpm.c
> index b6e93e14fcf1..6b3b507a54eb 100644
> --- a/drivers/firmware/efi/libstub/tpm.c
> +++ b/drivers/firmware/efi/libstub/tpm.c
> @@ -114,8 +114,8 @@ void efi_retrieve_tpm2_eventlog(efi_system_table_t *sys_table_arg)
>                          */
>                         last_entry_size =
>                                 __calc_tpm2_event_size((void *)last_entry_addr,
> -                                                      (void *)log_location,
> -                                                      false);
> +                                                   (void *)(long)log_location,
> +                                                   false);
>                 } else {
>                         last_entry_size = sizeof(struct tcpa_event) +
>                            ((struct tcpa_event *) last_entry_addr)->event_size;
> --
> 2.21.0.392.gf8f6787159e-goog
>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/2] efi: Fix cast to pointer from integer of different size in TPM log code
  2019-04-04 12:54   ` Ard Biesheuvel
@ 2019-04-04 17:23     ` Matthew Garrett
  0 siblings, 0 replies; 12+ messages in thread
From: Matthew Garrett @ 2019-04-04 17:23 UTC (permalink / raw)
  To: Ard Biesheuvel
  Cc: linux-integrity, Peter Hüwe, Jarkko Sakkinen,
	Jason Gunthorpe, Roberto Sassu, linux-efi, linux-security-module,
	Linux Kernel Mailing List, Thiebaud Weksteen

On Thu, Apr 4, 2019 at 5:54 AM Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote:
>
> On Wed, 3 Apr 2019 at 04:56, Matthew Garrett <matthewgarrett@google.com> wrote:
> >
> > 8bfcff4a6a1d9d7226bb63a7da758b82d9ab4373
>
> Which tree is this commit in?

Sorry, these are in the tpmdd-next tree.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] TCG2 log support build fixes for non-x86_64
  2019-04-04 12:40 ` [PATCH] TCG2 log support build fixes for non-x86_64 Jarkko Sakkinen
@ 2019-04-04 17:24   ` Matthew Garrett
  0 siblings, 0 replies; 12+ messages in thread
From: Matthew Garrett @ 2019-04-04 17:24 UTC (permalink / raw)
  To: Jarkko Sakkinen
  Cc: linux-integrity, Peter Huewe, Jason Gunthorpe, Roberto Sassu,
	linux-efi, LSM List, Linux Kernel Mailing List,
	Thiébaud Weksteen

On Thu, Apr 4, 2019 at 5:41 AM Jarkko Sakkinen
<jarkko.sakkinen@linux.intel.com> wrote:
>
> On Tue, Apr 02, 2019 at 02:55:54PM -0700, Matthew Garrett wrote:
> > Couple of patches to fix ktest reported issues with the crypto-agile log
> > format support.
>
> I guess I squash these to your earlier commits?

Works for me.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH] TCG2 log support build fixes for non-x86_64
  2019-04-02 21:55 [PATCH] TCG2 log support build fixes for non-x86_64 Matthew Garrett
                   ` (2 preceding siblings ...)
  2019-04-04 12:40 ` [PATCH] TCG2 log support build fixes for non-x86_64 Jarkko Sakkinen
@ 2019-04-15  8:47 ` Jarkko Sakkinen
  3 siblings, 0 replies; 12+ messages in thread
From: Jarkko Sakkinen @ 2019-04-15  8:47 UTC (permalink / raw)
  To: Matthew Garrett
  Cc: linux-integrity, peterhuewe, jgg, roberto.sassu, linux-efi,
	linux-security-module, linux-kernel, tweek

On Tue, Apr 02, 2019 at 02:55:54PM -0700, Matthew Garrett wrote:
> Couple of patches to fix ktest reported issues with the crypto-agile log
> format support.

Applied and squashed. Should be soon in linux-next.

/Jarkko

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2019-04-15  8:47 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-04-02 21:55 [PATCH] TCG2 log support build fixes for non-x86_64 Matthew Garrett
2019-04-02 21:55 ` [PATCH 1/2] efi: Fix cast to pointer from integer of different size in TPM log code Matthew Garrett
2019-04-03 13:42   ` David Laight
2019-04-03 16:51     ` Matthew Garrett
2019-04-04 12:39   ` Jarkko Sakkinen
2019-04-04 12:54   ` Ard Biesheuvel
2019-04-04 17:23     ` Matthew Garrett
2019-04-02 21:55 ` [PATCH 2/2] tpm: Fix builds on platforms that lack early_memremap() Matthew Garrett
2019-04-04 12:40   ` Jarkko Sakkinen
2019-04-04 12:40 ` [PATCH] TCG2 log support build fixes for non-x86_64 Jarkko Sakkinen
2019-04-04 17:24   ` Matthew Garrett
2019-04-15  8:47 ` Jarkko Sakkinen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).