SecurityPkg: AuthVariableLib: Fix inconsistent CertDB case
authorZhang, Chao B <chao.b.zhang@intel.com>
Tue, 16 Aug 2016 02:21:42 +0000 (10:21 +0800)
committerZhang, Chao B <chao.b.zhang@intel.com>
Wed, 17 Aug 2016 01:01:46 +0000 (09:01 +0800)
  2 steps are used to create/delete a time based variable.
  For create
     step 1: Insert Signer Cert to CertDB.
     Step 2: Insert Payload to Variable.
  For delete
     step 1: Delete Variable.
     Step 2: Delete Cert from CertDB.
  System may breaks between step 1 & step 2, so CertDB may contains useless
Cert in the next reboot. AuthVariableLib choose to sync consistent state
between CertDB & Time Auth Variable on initialization. However, it doesn't
apply Time Auth attribute check. Now add it.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Chao Zhang <chao.b.zhang@intel.com>
Reviewed-by: Fu Siyuan <siyuan.fu@intel.com>
Reviewed-by: Zeng Star <star.zeng@intel.com>
SecurityPkg/Library/AuthVariableLib/AuthService.c

index 6e1e284801124cb71c1982aea8ee27becd7d3968..b013d420f62e29097e418143e19b85d866b3af76 100644 (file)
@@ -2100,7 +2100,7 @@ CleanCertsFromDb (
                                        &AuthVariableInfo\r
                                        );\r
 \r
-      if (EFI_ERROR(Status)) {\r
+      if (EFI_ERROR(Status) || (AuthVariableInfo.Attributes & EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS) == 0) {\r
         Status      = DeleteCertsFromDb(\r
                         VariableName,\r
                         &AuthVarGuid,\r