[SLOF] [PATCH v4 1/5] tcgbios: Change format of S_CRTM_VERSION string to ucs-2

Stefan Berger stefanb at linux.ibm.com
Sun Jul 11 23:42:39 AEST 2021


On 7/9/21 11:38 AM, Stefan Berger wrote:
> From: Stefan Berger <stefanb at linux.ibm.com>
>
> Change the format of the S_CRTM_VERSION string to ucs-2 since this
> is what seems to be commonly used by other firmwares following
> insight from a TCG work group member.
>
> Signed-off-by: Alexey Kardashevskiy <aik at ozlabs.ru>
> Tested-by: Stefan Berger <stefanb at linux.ibm.com>
Signed-off-by: Stefan Berger <stefanb at linux.ibm.com>
> ---
>   Makefile.gen         |  2 +-
>   lib/libtpm/Makefile  |  1 +
>   lib/libtpm/tcgbios.c | 23 ++++++++++++-----------
>   make.rules           |  3 ++-
>   4 files changed, 16 insertions(+), 13 deletions(-)
>
> diff --git a/Makefile.gen b/Makefile.gen
> index f18c57a..6f78829 100644
> --- a/Makefile.gen
> +++ b/Makefile.gen
> @@ -164,7 +164,7 @@ distclean_gen:	clean_top
>   
>   common-libs:
>   	@echo " ====== Building common libraries ======"
> -	$(MAKE) -C $(LIBCMNDIR) $(COMMON_LIBS)
> +	$(MAKE) -C $(LIBCMNDIR) $(COMMON_LIBS)  RELEASE=-DRELEASE=\"\\\"$(RELEASE)\\\"\"
>   
>   board-libs:
>   	$(MAKE) -C lib $(MAKEARG)
> diff --git a/lib/libtpm/Makefile b/lib/libtpm/Makefile
> index 9d32dfc..895dbfd 100644
> --- a/lib/libtpm/Makefile
> +++ b/lib/libtpm/Makefile
> @@ -15,6 +15,7 @@ TOPCMNDIR ?= ../..
>   CPPFLAGS = -I../libc/include $(CPUARCHDEF) -I$(INCLBRDDIR) \
>   	   -I$(INCLCMNDIR) -I$(INCLCMNDIR)/$(CPUARCH) -I$(SLOFCMNDIR)
>   CPPFLAGS += -I../libhvcall
> +CPPFLAGS += $(RELEASE)
>   
>   LDFLAGS = -nostdlib
>   
> diff --git a/lib/libtpm/tcgbios.c b/lib/libtpm/tcgbios.c
> index dcf0cc6..24ac83c 100644
> --- a/lib/libtpm/tcgbios.c
> +++ b/lib/libtpm/tcgbios.c
> @@ -1108,24 +1108,25 @@ uint32_t tpm_measure_gpt(void)
>   
>   uint32_t tpm_measure_scrtm(void)
>   {
> -	uint32_t rc;
> -	char *version_start = strstr((char *)&print_version, "FW Version");
> -	char *version_end;
> -	uint32_t version_length;
> +	uint32_t rc, i;
>   	char *slof_text_start = (char *)&_slof_text;
>   	uint32_t slof_text_length = (long)&_slof_text_end - (long)&_slof_text;
>   	const char *scrtm = "S-CRTM Contents";
> -
> -	version_end = strchr(version_start, '\r');
> -	version_length = version_end - version_start;
> +#define _TT(a, x) a##x
> +#define _T(a, x) _TT(a, x)
> +	unsigned short ucs2_version[] = _T(L, RELEASE);
>   
>   	dprintf("Measure S-CRTM Version: addr = %p, length = %d\n",
> -		version_start, version_length);
> +		ucs2_version, ucs2_length);
> +
> +	for (i = 0; i < ARRAY_SIZE(ucs2_version); ++i)
> +	    ucs2_version[i] = cpu_to_le16(ucs2_version[i]);
>   
>   	rc = tpm_add_measurement_to_log(0, EV_S_CRTM_VERSION,
> -					version_start, version_length,
> -					(uint8_t *)version_start,
> -					version_length);
> +					(char *)ucs2_version,
> +					sizeof(ucs2_version),
> +					(uint8_t *)ucs2_version,
> +					sizeof(ucs2_version));
>   	if (rc)
>   		return rc;
>   
> diff --git a/make.rules b/make.rules
> index 885eea3..d37c365 100644
> --- a/make.rules
> +++ b/make.rules
> @@ -79,6 +79,7 @@ CPP		?= $(CROSS)cpp
>   WARNFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -Wformat-security -Wextra -Wno-unused-parameter
>   CFLAGS ?= -g -O2 -fno-builtin -ffreestanding -nostdinc -msoft-float \
>   	  -fno-strict-aliasing -mno-altivec -mabi=no-altivec \
> -	  -fno-stack-protector -fno-asynchronous-unwind-tables $(WARNFLAGS)
> +	  -fno-stack-protector -fno-asynchronous-unwind-tables $(WARNFLAGS) \
> +	  -fshort-wchar
>   
>   export CC AS LD CLEAN OBJCOPY OBJDUMP STRIP AR RANLIB CFLAGS


More information about the SLOF mailing list