[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 3/4] tpm: CRB: Enforce locality is requested bef
From: |
Marc-André Lureau |
Subject: |
Re: [Qemu-devel] [PATCH 3/4] tpm: CRB: Enforce locality is requested before processing buffer |
Date: |
Thu, 29 Mar 2018 12:45:10 +0200 |
On Wed, Mar 28, 2018 at 10:59 PM, Stefan Berger
<address@hidden> wrote:
> Section 5.5.3.2.2 of the CRB specs states that use of the TPM
> through the localty control method must first be requested,
> otherwise TPM commands will be dropped. This patch makes sure
> that the current locality is the active locality and only then
> sends off the command for processing.
>
> Signed-off-by: Stefan Berger <address@hidden>
Reviewed-by: Marc-André Lureau <address@hidden>
> ---
> hw/tpm/tpm_crb.c | 13 ++++++++++++-
> 1 file changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/hw/tpm/tpm_crb.c b/hw/tpm/tpm_crb.c
> index ee6c87e..520e74e 100644
> --- a/hw/tpm/tpm_crb.c
> +++ b/hw/tpm/tpm_crb.c
> @@ -76,6 +76,8 @@ enum crb_cancel {
> CRB_CANCEL_INVOKE = BIT(0),
> };
>
> +#define TPM_CRB_NO_LOCALITY 0xff
> +
> static uint64_t tpm_crb_mmio_read(void *opaque, hwaddr addr,
> unsigned size)
> {
> @@ -95,10 +97,18 @@ static uint64_t tpm_crb_mmio_read(void *opaque, hwaddr
> addr,
> return val;
> }
>
> +static uint8_t tpm_crb_get_active_locty(CRBState *s)
> +{
> + if (!ARRAY_FIELD_EX32(s->regs, CRB_LOC_STATE, locAssigned))
> + return TPM_CRB_NO_LOCALITY;
> + return ARRAY_FIELD_EX32(s->regs, CRB_LOC_STATE, activeLocality);
> +}
> +
> static void tpm_crb_mmio_write(void *opaque, hwaddr addr,
> uint64_t val, unsigned size)
> {
> CRBState *s = CRB(opaque);
> + uint8_t locty = addr >> 12;
>
> trace_tpm_crb_mmio_write(addr, size, val);
>
> @@ -123,7 +133,8 @@ static void tpm_crb_mmio_write(void *opaque, hwaddr addr,
> break;
> case A_CRB_CTRL_START:
> if (val == CRB_START_INVOKE &&
> - !(s->regs[R_CRB_CTRL_START] & CRB_START_INVOKE)) {
> + !(s->regs[R_CRB_CTRL_START] & CRB_START_INVOKE) &&
> + tpm_crb_get_active_locty(s) == locty) {
> void *mem = memory_region_get_ram_ptr(&s->cmdmem);
>
> s->regs[R_CRB_CTRL_START] |= CRB_START_INVOKE;
> --
> 2.5.5
>
>
--
Marc-André Lureau
- [Qemu-devel] [PATCH 0/4] tpm: More improvements on CRB interface, Stefan Berger, 2018/03/28
- [Qemu-devel] [PATCH 1/4] tpm: CRB: set the Idle flag by default, Stefan Berger, 2018/03/28
- [Qemu-devel] [PATCH 3/4] tpm: CRB: Enforce locality is requested before processing buffer, Stefan Berger, 2018/03/28
- Re: [Qemu-devel] [PATCH 3/4] tpm: CRB: Enforce locality is requested before processing buffer,
Marc-André Lureau <=
- [Qemu-devel] [PATCH 2/4] tpm: CRB: Reset Granted flag when relinquishing locality, Stefan Berger, 2018/03/28
- [Qemu-devel] [PATCH 4/4] tests: Tests more flags of the CRB interface, Stefan Berger, 2018/03/28
- Re: [Qemu-devel] [PATCH 0/4] tpm: More improvements on CRB interface, no-reply, 2018/03/29
- Re: [Qemu-devel] [PATCH 0/4] tpm: More improvements on CRB interface, no-reply, 2018/03/31