From dee23601a252d9bb8a42e2e02f6020a1688eee09 Mon Sep 17 00:00:00 2001 From: Nick Bofferding Date: Sun, 25 Jun 2017 23:50:03 -0500 Subject: [PATCH] Fix size calculation when allocating TPM data - Allocated max size before clearing TPM related HDAT data - Eliminated duplicate TPM related HDAT data clear Change-Id: I3cb38204e4641ec9e02c6c6dda29bf0fc08c9694 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/42411 Tested-by: Jenkins Server Tested-by: Jenkins OP Build CI Tested-by: FSP CI Jenkins Reviewed-by: Stephen M. Cprek Reviewed-by: Michael Baiocchi Reviewed-by: Prachi Gupta Reviewed-by: Daniel M. Crowell --- src/usr/hdat/hdattpmdata.C | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/usr/hdat/hdattpmdata.C b/src/usr/hdat/hdattpmdata.C index dddfc6c6714..9ef885227fe 100644 --- a/src/usr/hdat/hdattpmdata.C +++ b/src/usr/hdat/hdattpmdata.C @@ -55,8 +55,8 @@ HdatTpmData::HdatTpmData(errlHndl_t &o_errlHndl, const uint64_t l_baseAddr = static_cast(i_msAddr.hi) << 32 | i_msAddr.lo; - - const uint64_t l_size = ALIGN_PAGE(sizeof(hdatTpmData_t)) + PAGESIZE; + const auto maxLogicalSize = hdatTpmDataCalcMaxSize(); + const uint64_t l_size = ALIGN_PAGE(maxLogicalSize) + PAGESIZE; const uint64_t l_alignedAddr = ALIGN_PAGE_DOWN(l_baseAddr); @@ -72,7 +72,7 @@ HdatTpmData::HdatTpmData(errlHndl_t &o_errlHndl, // TODO RTC 167290 - This memset needs to be revisited for multinode // support. We may need to do this memset once per node or use some // other approach to initialization. - memset(iv_hdatTpmData, 0x0, sizeof(hdatTpmData_t)); + memset(iv_hdatTpmData, 0x0, maxLogicalSize); HDAT_DBG("Ctr iv_hdatTpmData addr 0x%.16llX virtual addr 0x%.16llX", reinterpret_cast(iv_hdatTpmData), @@ -149,8 +149,8 @@ errlHndl_t HdatTpmData::hdatLoadTpmData(uint32_t &o_size, uint32_t &o_count) o_size = hdatTpmDataCalcMaxSize(); - // zero all of it - memset(iv_hdatTpmData,0,o_size); + // Note: HdatTpmData constructor already cleared the memory to the tune of + // o_size (hdatTpmDataCalcMaxSize()) bytes // We add the first two fields for a reference to aid in debugging, // but the rest will be populated in FSP/OpenPower common code. Any