public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Wu, Hao A" <hao.a.wu@intel.com>
To: "Dong, Eric" <eric.dong@intel.com>,
	"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Subject: Re: [Patch 3/3] SecurityPkg/OpalPassword: Add support for pyrite 2.0 devices.
Date: Mon, 7 May 2018 05:34:23 +0000	[thread overview]
Message-ID: <B80AF82E9BFB8E4FBD8C89DA810C6A0931D99B06@SHSMSX104.ccr.corp.intel.com> (raw)
In-Reply-To: <ED077930C258884BBCB450DB737E66224AB8A32B@SHSMSX101.ccr.corp.intel.com>

Thanks and with the changes:
Reviewed-by: Hao Wu <hao.a.wu@intel.com>

Best Regards,
Hao Wu


> -----Original Message-----
> From: Dong, Eric
> Sent: Monday, May 07, 2018 1:33 PM
> To: Wu, Hao A; edk2-devel@lists.01.org
> Subject: RE: [Patch 3/3] SecurityPkg/OpalPassword: Add support for pyrite 2.0
> devices.
> 
> Hi Hao,
> 
> Thanks for your comments, I will update it when I check in the code.
> 
> Thanks,
> Eric
> 
> -----Original Message-----
> From: Wu, Hao A
> Sent: Monday, May 7, 2018 11:08 AM
> To: Dong, Eric <eric.dong@intel.com>; edk2-devel@lists.01.org
> Subject: RE: [Patch 3/3] SecurityPkg/OpalPassword: Add support for pyrite 2.0
> devices.
> 
> Some comments below:
> 
> > -----Original Message-----
> > From: Dong, Eric
> > Sent: Thursday, May 03, 2018 11:17 AM
> > To: edk2-devel@lists.01.org; Wu, Hao A
> > Subject: [Patch 3/3] SecurityPkg/OpalPassword: Add support for pyrite
> > 2.0 devices.
> >
> > Contributed-under: TianoCore Contribution Agreement 1.1
> > Signed-off-by: Eric Dong <eric.dong@intel.com>
> > ---
> >  SecurityPkg/Tcg/Opal/OpalPassword/OpalDriver.c     | 60 ++++++++++++++--
> >  SecurityPkg/Tcg/Opal/OpalPassword/OpalDriver.h     |  9 +++
> >  SecurityPkg/Tcg/Opal/OpalPassword/OpalHii.c        | 84
> > ++++++++++++++++++++++
> >  .../Tcg/Opal/OpalPassword/OpalPasswordPei.c        |  1 +
> >  4 files changed, 147 insertions(+), 7 deletions(-)
> >
> > diff --git a/SecurityPkg/Tcg/Opal/OpalPassword/OpalDriver.c
> > b/SecurityPkg/Tcg/Opal/OpalPassword/OpalDriver.c
> > index 4133e503e2..91ab372f0c 100644
> > --- a/SecurityPkg/Tcg/Opal/OpalPassword/OpalDriver.c
> > +++ b/SecurityPkg/Tcg/Opal/OpalPassword/OpalDriver.c
> > @@ -105,10 +105,9 @@ OpalSupportGetAvailableActions(
> >    }
> >
> >    //
> > -  // Psid revert is available for any device with media encryption
> > support
> > -  // Revert is allowed for any device with media encryption support,
> > however it requires
> > +  // Psid revert is available for any device with media encryption
> > + support or
> > pyrite 2.0 type support.
> >    //
> > -  if (SupportedAttributes->MediaEncryption) {
> > +  if (SupportedAttributes->PyriteSscV2 || SupportedAttributes-
> > >MediaEncryption) {
> >
> >      //
> >      // Only allow psid revert if media encryption is enabled.
> 
> For the comments here:
>     //
>     // Only allow psid revert if media encryption is enabled.
>     // Otherwise, someone who steals a disk can psid revert the disk and the user
> Data is still
>     // intact and accessible
>     //
> I think we'd better update it as well.
> 
> > @@ -657,6 +656,8 @@ OpalEndOfDxeEventNotify (
> >    @param[in]  Dev           The device which need Psid to process Psid Revert
> >                              OPAL request.
> >    @param[in]  PopUpString   Pop up string.
> > +  @param[in]  PopUpString2  Pop up string in line 2.
> > +
> >    @param[out] PressEsc      Whether user escape function through Press ESC.
> >
> >    @retval Psid string if success. NULL if failed.
> > @@ -666,6 +667,7 @@ CHAR8 *
> >  OpalDriverPopUpPsidInput (
> >    IN OPAL_DRIVER_DEVICE     *Dev,
> >    IN CHAR16                 *PopUpString,
> > +  IN CHAR16                 *PopUpString2,
> >    OUT BOOLEAN               *PressEsc
> >    )
> >  {
> > @@ -689,6 +691,7 @@ OpalDriverPopUpPsidInput (
> >        EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,
> >        &InputKey,
> >        PopUpString,
> > +      PopUpString2,
> >        L"---------------------",
> >        Mask,
> >        NULL
> > @@ -1369,6 +1372,8 @@ ProcessOpalRequestPsidRevert (
> >    EFI_INPUT_KEY         Key;
> >    TCG_RESULT            Ret;
> >    CHAR16                *PopUpString;
> > +  CHAR16                *PopUpString2;
> > +  UINTN                 BufferSize;
> >
> >    if (Dev == NULL) {
> >      return;
> > @@ -1378,6 +1383,20 @@ ProcessOpalRequestPsidRevert (
> >
> >    PopUpString = OpalGetPopUpString (Dev, RequestString);
> >
> > +  if (Dev->OpalDisk.EstimateTimeCost >
> MAX_ACCEPTABLE_REVERTING_TIME)
> > {
> > +    BufferSize = StrSize (L"Warning: Revert action will take about
> > + ######
> > seconds, DO NOT power off system during the revert action!");
> 
> The 'BufferSize' seems not big enough to me.
> Per my understanding, the possible max timeout value can be:
> 65534 * 2 * 60 = 7864080 seconds
> 
> So using '######' to keep space for 6 digits maybe not enough. Some
> characters might get truncated.
> 
> > +    PopUpString2 = AllocateZeroPool (BufferSize);
> > +    ASSERT (PopUpString2 != NULL);
> > +    UnicodeSPrint (
> > +        PopUpString2,
> > +        BufferSize,
> > +        L"WARNING: Revert action will take about %d seconds, DO NOT
> > + power
> > off system during the revert action!",
> > +        Dev->OpalDisk.EstimateTimeCost
> > +      );
> > +  } else {
> > +    PopUpString2 = NULL;
> > +  }
> > +
> >    Count = 0;
> >
> >    ZeroMem(&Session, sizeof(Session)); @@ -1386,7 +1405,7 @@
> > ProcessOpalRequestPsidRevert (
> >    Session.OpalBaseComId = Dev->OpalDisk.OpalBaseComId;
> >
> >    while (Count < MAX_PSID_TRY_COUNT) {
> > -    Psid = OpalDriverPopUpPsidInput (Dev, PopUpString, &PressEsc);
> > +    Psid = OpalDriverPopUpPsidInput (Dev, PopUpString, PopUpString2,
> > &PressEsc);
> >      if (PressEsc) {
> >          do {
> >            CreatePopUp (
> > @@ -1400,7 +1419,7 @@ ProcessOpalRequestPsidRevert (
> >
> >          if (Key.UnicodeChar == CHAR_CARRIAGE_RETURN) {
> >            gST->ConOut->ClearScreen(gST->ConOut);
> > -          return;
> > +          goto Done;
> >          } else {
> >            //
> >            // Let user input Psid again.
> > @@ -1456,6 +1475,11 @@ ProcessOpalRequestPsidRevert (
> >      } while (Key.UnicodeChar != CHAR_CARRIAGE_RETURN);
> >      gST->ConOut->ClearScreen(gST->ConOut);
> >    }
> > +
> > +Done:
> > +  if (PopUpString2 != NULL) {
> > +    FreePool (PopUpString2);
> > +  }
> >  }
> >
> >  /**
> > @@ -1482,6 +1506,8 @@ ProcessOpalRequestRevert (
> >    TCG_RESULT            Ret;
> >    BOOLEAN               PasswordFailed;
> >    CHAR16                *PopUpString;
> > +  CHAR16                *PopUpString2;
> > +  UINTN                 BufferSize;
> >
> >    if (Dev == NULL) {
> >      return;
> > @@ -1491,6 +1517,20 @@ ProcessOpalRequestRevert (
> >
> >    PopUpString = OpalGetPopUpString (Dev, RequestString);
> >
> > +  if (Dev->OpalDisk.EstimateTimeCost >
> MAX_ACCEPTABLE_REVERTING_TIME)
> > {
> > +    BufferSize = StrSize (L"Warning: Revert action will take about
> > + ######
> > seconds, DO NOT power off system during the revert action!");
> 
> Similar comments as above.
> 
> Using '######' to keep space for 6 digits maybe not enough. Some characters
> might get truncated.
> 
> > +    PopUpString2 = AllocateZeroPool (BufferSize);
> > +    ASSERT (PopUpString2 != NULL);
> > +    UnicodeSPrint (
> > +        PopUpString2,
> > +        BufferSize,
> > +        L"WARNING: Revert action will take about %d seconds, DO NOT
> > + power
> > off system during the revert action!",
> > +        Dev->OpalDisk.EstimateTimeCost
> > +      );
> > +  } else {
> > +    PopUpString2 = NULL;
> > +  }
> > +
> >    Count = 0;
> >
> >    ZeroMem(&Session, sizeof(Session)); @@ -1499,7 +1539,7 @@
> > ProcessOpalRequestRevert (
> >    Session.OpalBaseComId = Dev->OpalDisk.OpalBaseComId;
> >
> >    while (Count < MAX_PASSWORD_TRY_COUNT) {
> > -    Password = OpalDriverPopUpPasswordInput (Dev, PopUpString, NULL,
> > &PressEsc);
> > +    Password = OpalDriverPopUpPasswordInput (Dev, PopUpString,
> > PopUpString2, &PressEsc);
> >      if (PressEsc) {
> >          do {
> >            CreatePopUp (
> > @@ -1513,7 +1553,7 @@ ProcessOpalRequestRevert (
> >
> >          if (Key.UnicodeChar == CHAR_CARRIAGE_RETURN) {
> >            gST->ConOut->ClearScreen(gST->ConOut);
> > -          return;
> > +          goto Done;
> >          } else {
> >            //
> >            // Let user input password again.
> > @@ -1596,6 +1636,11 @@ ProcessOpalRequestRevert (
> >      } while (Key.UnicodeChar != CHAR_CARRIAGE_RETURN);
> >      gST->ConOut->ClearScreen(gST->ConOut);
> >    }
> > +
> > +Done:
> > +  if (PopUpString2 != NULL) {
> > +    FreePool (PopUpString2);
> > +  }
> >  }
> >
> >  /**
> > @@ -2337,6 +2382,7 @@ ReadyToBootCallback (
> >          Session.MediaId = Itr->OpalDisk.MediaId;
> >          Session.OpalBaseComId = Itr->OpalDisk.OpalBaseComId;
> >
> > +        DEBUG ((DEBUG_INFO, "OpalPassword: ReadyToBoot point, send
> > BlockSid command to device!\n"));
> >          Result = OpalBlockSid (&Session, TRUE);  // HardwareReset
> > must always be TRUE
> >          if (Result != TcgResultSuccess) {
> >            DEBUG ((DEBUG_ERROR, "OpalBlockSid fail\n")); diff --git
> > a/SecurityPkg/Tcg/Opal/OpalPassword/OpalDriver.h
> > b/SecurityPkg/Tcg/Opal/OpalPassword/OpalDriver.h
> > index 2154523e93..2fe7ada29b 100644
> > --- a/SecurityPkg/Tcg/Opal/OpalPassword/OpalDriver.h
> > +++ b/SecurityPkg/Tcg/Opal/OpalPassword/OpalDriver.h
> > @@ -75,6 +75,13 @@ extern EFI_COMPONENT_NAME2_PROTOCOL
> > gOpalComponentName2;
> >  #define PSID_CHARACTER_LENGTH   0x20
> >  #define MAX_PSID_TRY_COUNT      5
> >
> > +//
> > +// The max timeout value assume the user can wait for the revert action.
> > +// If the revert time value bigger than this one, driver needs to
> > +popup a // dialog to let user confirm the revert action.
> > +//
> > +#define MAX_ACCEPTABLE_REVERTING_TIME    10
> 
> It would be better to state that the unit of this macro is second.
> 
> > +
> >  #pragma pack(1)
> >
> >  //
> > @@ -140,6 +147,8 @@ typedef struct {
> >    TCG_LOCKING_FEATURE_DESCRIPTOR                  LockingFeature;         //
> > Locking Feature Descriptor retrieved from performing a Level 0 Discovery
> >    UINT8                                           PasswordLength;
> >    UINT8                                           Password[OPAL_MAX_PASSWORD_SIZE];
> > +
> > +  UINT32                                          EstimateTimeCost;
> >  } OPAL_DISK;
> >
> >  //
> > diff --git a/SecurityPkg/Tcg/Opal/OpalPassword/OpalHii.c
> > b/SecurityPkg/Tcg/Opal/OpalPassword/OpalHii.c
> > index e4972227b6..479f413c07 100644
> > --- a/SecurityPkg/Tcg/Opal/OpalPassword/OpalHii.c
> > +++ b/SecurityPkg/Tcg/Opal/OpalPassword/OpalHii.c
> > @@ -13,6 +13,10 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF
> ANY KIND,
> > EITHER EXPRESS OR IMPLIED.
> >  **/
> >
> >  #include "OpalHii.h"
> > +//
> > +// Character definitions
> > +//
> > +#define UPPER_LOWER_CASE_OFFSET 0x20
> >
> >  //
> >  // This is the generated IFR binary Data for each formset defined in VFR.
> > @@ -520,6 +524,59 @@ GetDiskNameStringId(
> >    return 0;
> >  }
> >
> > +/**
> > +  Confirm whether user truly want to do the revert action.
> > +
> > +  @param     OpalDisk            The device which need to do the revert action.
> > +
> > +  @retval  EFI_SUCCESS           Confirmed user want to do the revert action.
> > +**/
> > +EFI_STATUS
> > +HiiConfirmRevertAction (
> > +  IN OPAL_DISK                  *OpalDisk
> > +
> > +  )
> > +{
> > +  CHAR16                        Unicode[512];
> > +  EFI_INPUT_KEY                 Key;
> > +  CHAR16                        ApproveResponse;
> > +  CHAR16                        RejectResponse;
> > +
> > +  //
> > +  // When the estimate cost time bigger than
> > MAX_ACCEPTABLE_REVERTING_TIME, pop up dialog to let user confirm
> > +  // the revert action.
> > +  //
> > +  if (OpalDisk->EstimateTimeCost < MAX_ACCEPTABLE_REVERTING_TIME) {
> > +    return EFI_SUCCESS;
> > +  }
> > +
> > +  ApproveResponse = L'Y';
> > +  RejectResponse  = L'N';
> > +
> > +  UnicodeSPrint(Unicode, StrSize(L"WARNING: Revert device needs about
> > ###### seconds"), L"WARNING: Revert device needs about %d seconds",
> > OpalDisk->EstimateTimeCost);
> 
> Again, using '######' to keep space for 6 digits maybe not enough. Some
> characters might get truncated.
> 
> Best Regards,
> Hao Wu
> 
> > +
> > +  do {
> > +    CreatePopUp(
> > +        EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,
> > +        &Key,
> > +        Unicode,
> > +        L" System should not be powered off until revert completion ",
> > +        L" ",
> > +        L" Press 'Y/y' to continue, press 'N/n' to cancal ",
> > +        NULL
> > +    );
> > +  } while (
> > +      ((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) !=
> > + (ApproveResponse
> > | UPPER_LOWER_CASE_OFFSET)) &&
> > +      ((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) != (RejectResponse
> > + |
> > UPPER_LOWER_CASE_OFFSET))
> > +    );
> > +
> > +  if ((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) == (RejectResponse
> > + |
> > UPPER_LOWER_CASE_OFFSET)) {
> > +    return EFI_ABORTED;
> > +  }
> > +
> > +  return EFI_SUCCESS;
> > +}
> > +
> >  /**
> >    This function processes the results of changes in configuration.
> >
> > @@ -588,6 +645,17 @@ DriverCallback(
> >      switch (HiiKeyId) {
> >        case HII_KEY_ID_GOTO_DISK_INFO:
> >          return HiiSelectDisk((UINT8)HiiKey.KeyBits.Index);
> > +
> > +      case HII_KEY_ID_REVERT:
> > +      case HII_KEY_ID_PSID_REVERT:
> > +        OpalDisk = HiiGetOpalDiskCB(gHiiConfiguration.SelectedDiskIndex);
> > +        if (OpalDisk != NULL) {
> > +          return HiiConfirmRevertAction (OpalDisk);
> > +        } else {
> > +          ASSERT (FALSE);
> > +          return EFI_SUCCESS;
> > +        }
> > +
> >      }
> >    } else if (Action == EFI_BROWSER_ACTION_CHANGED) {
> >      switch (HiiKeyId) {
> > @@ -1112,6 +1180,8 @@ OpalDiskInitialize (  {
> >    TCG_RESULT                  TcgResult;
> >    OPAL_SESSION                Session;
> > +  UINT8                       ActiveDataRemovalMechanism;
> > +  UINT32                      RemovalMechanishLists[ResearvedMechanism];
> >
> >    ZeroMem(&Dev->OpalDisk, sizeof(OPAL_DISK));
> >    Dev->OpalDisk.Sscp = Dev->Sscp;
> > @@ -1133,6 +1203,20 @@ OpalDiskInitialize (
> >      return EFI_DEVICE_ERROR;
> >    }
> >
> > +  if (Dev->OpalDisk.SupportedAttributes.DataRemoval) {
> > +    TcgResult = OpalUtilGetDataRemovalMechanismLists (&Session,
> > RemovalMechanishLists);
> > +    if (TcgResult != TcgResultSuccess) {
> > +      return EFI_DEVICE_ERROR;
> > +    }
> > +
> > +    TcgResult = OpalUtilGetActiveDataRemovalMechanism (&Session, Dev-
> > >OpalDisk.Msid, Dev->OpalDisk.MsidLength,
> > >&ActiveDataRemovalMechanism);
> > +    if (TcgResult != TcgResultSuccess) {
> > +      return EFI_DEVICE_ERROR;
> > +    }
> > +
> > +    Dev->OpalDisk.EstimateTimeCost =
> > RemovalMechanishLists[ActiveDataRemovalMechanism];
> > +  }
> > +
> >    return OpalDiskUpdateStatus (&Dev->OpalDisk);  }
> >
> > diff --git a/SecurityPkg/Tcg/Opal/OpalPassword/OpalPasswordPei.c
> > b/SecurityPkg/Tcg/Opal/OpalPassword/OpalPasswordPei.c
> > index b4b2d4b3f0..edb47ca8bc 100644
> > --- a/SecurityPkg/Tcg/Opal/OpalPassword/OpalPasswordPei.c
> > +++ b/SecurityPkg/Tcg/Opal/OpalPassword/OpalPasswordPei.c
> > @@ -635,6 +635,7 @@ UnlockOpalPassword (
> >      BlockSIDEnabled = FALSE;
> >    }
> >    if (BlockSIDEnabled && BlockSidSupport) {
> > +    DEBUG ((DEBUG_INFO, "OpalPassword: S3 phase send BlockSid command
> > to device!\n"));
> >      ZeroMem(&Session, sizeof (Session));
> >      Session.Sscp = &OpalDev->Sscp;
> >      Session.MediaId = 0;
> > --
> > 2.15.0.windows.1



  reply	other threads:[~2018-05-07  5:34 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-03  3:16 [Patch 0/3] Enable Pyrite 2.0 for opal driver Eric Dong
2018-05-03  3:17 ` [Patch 1/3] MdePkg: Add Feature definitions add in pyrite 2.0 spec Eric Dong
2018-05-07  3:08   ` Wu, Hao A
2018-05-03  3:17 ` [Patch 2/3] SecurityPkg/TcgStorageOpalLib: Add supports for " Eric Dong
2018-05-07  3:08   ` Wu, Hao A
2018-05-03  3:17 ` [Patch 3/3] SecurityPkg/OpalPassword: Add support for pyrite 2.0 devices Eric Dong
2018-05-07  3:08   ` Wu, Hao A
2018-05-07  5:33     ` Dong, Eric
2018-05-07  5:34       ` Wu, Hao A [this message]
2018-05-08  5:41 ` [Patch 0/3] Enable Pyrite 2.0 for opal driver Yao, Jiewen
2018-05-08  5:50   ` Dong, Eric
2018-05-08  6:01     ` Yao, Jiewen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=B80AF82E9BFB8E4FBD8C89DA810C6A0931D99B06@SHSMSX104.ccr.corp.intel.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox