Add devel@edk2.groups.io. > -----Original Message----- > From: Yao, Jiewen <jiewen....@intel.com> > Sent: Friday, February 7, 2020 6:13 AM > To: brbar...@microsoft.com; r...@edk2.groups.io > Cc: edk2-de...@lists.01.org > Subject: RE: [edk2-rfc] [edk2-devel] [RFC] VariablePolicy - Protocol, > Libraries, > and Implementation for VariableLock Alternative > > Thanks, Bret. > > Comments below. > > > -----Original Message----- > > From: brbarkel via [] <brbarkel=microsoft.com@[]> > > Sent: Friday, February 7, 2020 5:49 AM > > To: Yao; Yao, Jiewen <jiewen....@intel.com>; r...@edk2.groups.io > > Subject: Re: [edk2-rfc] [edk2-devel] [RFC] VariablePolicy - Protocol, > > Libraries, > > and Implementation for VariableLock Alternative > > > > Sorry, Jiewen. I missed this email when it came in... > > > > > 1. We have 2 variable related protocol - EDKII_VARIABLE_LOCK_PROTOCOL > > and EDKII_VAR_CHECK_PROTOCOL. Do you want to deprecate both? Or only > > deprecate EDKII_VARIABLE_LOCK_PROTOCOL? > > > > I think we would recommend deprecating both. Is there much consumption of > > the VarCheck protocol? A platform could always opt to include both (or all > > 3!), > > but they wouldn't be able to immediately tell which engine rejected the > > SetVariable. > > [Jiewen] Right. That is my understanding- deprecate both. > I saw you only mention to deprecate VarLock, but not VarCheck. That is why I > get confused. > > I don’t recommend we have 3 engines. Too burden to maintain the code. > > One possible option is to implement VarLockProtocol and VarCheckProtocol on > top of VarPolicyProtocol. (like a thunk) > As such, there is no impact on the existing private platform code, with the > benefit that one central engine controls everything. > Later, we can check platform one by one. After the last one is migrated, we > can > remove VarLock and VarCheck thunk. > > > > > > > 2. The Function - DumpVariablePolicy() - makes me confused in the > beginning. > > In my thought, "Dump" means to show some debug message. But here, you > > want to return the policy. Can we change the name to GetVariablePolicy()? > > > > I see your point about possible confusion. I think we would try to clarify > > this in > > the function documentation. Due to the code-first approach we've taken on > this, > > we already have partners who have implemented the policy with > > DumpVariablePolicy as the name and it doesn't seem like a huge problem. > > > > > 3. The function - DisableVariablePolicy(). Does it disable current policy > engine? > > Does it disable any future policy engine? Does it block > > RegisterVariablePolicy() > > call? > > > > Disable turns off the enforcement. You should still be able to register new > > policies for auditing purposes (they will still be returned by > DumpVariablePolicy), > > but no SetVariables will be rejected. > > > > > 4. The function - LockVariablePolicy() - Can it lock the > > > DisableVariablePolicy() > > call? > > > > Correct. Once the interface is locked, it cannot be disabled. Locking > > should be > > performed at EndOfDxe or ReadyToBoot or wherever the platform TCB is. > > > > > 5. The use case "In MFG Mode Variable Policy Engine is disabled, thus > > > these > > VPD variables can be created. These variables are locked with lock policy > > type > > LockNow, so that these variables can't be tampered with in Customer Mode." > > > > Correct. The MfgMode is just a suggestion and is entirely up to the > > platform. > Our > > MfgMode (which has not been open-sourced yet, but we're working on it) will > > call DisableVariablePolicy because our threat model indicates that > compromising > > MfgMode is a total compromise (there are many other attack vectors once > > MfgMode is compromised). As such, we protect it extensively. But there is > > nothing in the core or extra code that would automatically disable the > > policy > > engine for any platform that didn't want that. It is up to the platform, > > however, > > to make sure they lock the policy engine (similar to locking SMM). > > [Jiewen] OK, if my understanding is correct, the DisablePolicy() should only > be > called in some special environment, but NOT a normal feature involved in the > normal boot. > > Then I am feeling we should separate the DisablePolicy from this protocol, > because this interface is very dangerous. I don’t want any driver call it by > mistake. > > Can we split the VARIABLE_POLICY to VARIABLE_POLICY (normal boot usage) + > VARIABLE_POLICY_CONTROL (very special usage) > > Like below: > > typedef struct { > UINT64 Revision; > REGISTER_VARIABLE_POLICY RegisterVariablePolicy; > DUMP_VARIABLE_POLICY DumpVariablePolicy; > LOCK_VARIABLE_POLICY LockVariablePolicy; > } _VARIABLE_POLICY_PROTOCOL; > > typedef struct { > UINT64 Revision; > DISABLE_VARIABLE_POLICY DisableVariablePolicy; > IS_VARIABLE_POLICY_ENABLED IsVariablePolicyEnabled; > } _VARIABLE_POLICY_CONTROL_PROTOCOL; > > VARIABLE_POLICY_PROTOCOL is always installed. > > In normal boot, the VARIABLE_POLICY_CONTROL_PROTOCOL is NOT installed. > As such, the policy is always enforced. > The VARIABLE_POLICY_CONTROL_PROTOCOL is only installed in some special > mode, controlled by PCD - maybe. > A platform may choose to: > 1) Use static PCD to always disable VARIABLE_POLICY_CONTROL_PROTOCOL > installation. > 2) Use dynamic PCD to control VARIABLE_POLICY_CONTROL_PROTOCOL > installation only in special mode. > > > Thank you > Yao Jiewen >
-=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#53880): https://edk2.groups.io/g/devel/message/53880 Mute This Topic: https://groups.io/mt/71035502/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-