HI Bret

Thanks for the work. The design doc is very good.

 

Some feedback/questions below:

 

  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?
  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()?
  3. The function - DisableVariablePolicy(). Does it disable current policy engine? Does it disable any future policy engine? Does it block RegisterVariablePolicy() call?
  4. The function – LockVariablePolicy() – Can it lock the DisableVariablePolicy() call?
  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.”

This seems a perfect potential attack point. If the attacker wants to modify a read-only variable. He or she may trigger the MFG mode, then no variable is locked. Then the attacker can update the RO variable then reset the system to normal mode. Is that threat considered?

 

Thank you

Yao Jiewen

 

 

From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Bret Barkelew via Groups.Io
Sent: Tuesday, February 4, 2020 4:08 PM
To: devel@edk2.groups.io; rfc@edk2.groups.io
Subject: Re: [edk2-devel] [RFC] VariablePolicy - Protocol, Libraries, and Implementation for VariableLock Alternative

 

Expanding the audience beyond the RFC list….

If no one has additional input, I’ll try to start formatting these as patches later this week. Thanks!

 

- Bret

 

From: Bret Barkelew
Sent: Tuesday, January 28, 2020 5:36 PM
To: rfc@edk2.groups.io
Subject: [RFC] VariablePolicy - Protocol, Libraries, and Implementation for VariableLock Alternative

 

All,

 

VariablePolicy is our proposal for an expanded “VarLock-like” interface to constrain and govern platform variables.

I brought this up back in May to get initial comments on the interface and implications of the interface and the approach. We implemented it in Mu over the summer and it is not our defacto variable solution. It plugs in easily to the existing variable infrastructure, but does want to control some of the things that are currently managed by VarLock.

 

There are also some tweaks that would be needed if this were desired to be 100% optional code, but that’s no different than the current VarLock implementation which has implementation code directly tied to some of the common variable code.

 

I’ve structured this RFC in two pieces:

 

The code can be found in the following two branches:

https://github.com/corthon/edk2/tree/personal/brbarkel/var_policy_rfc_core

https://github.com/corthon/edk2/tree/personal/brbarkel/var_policy_rfc_extra

 

A convenient way to see all the changes in one place is to look at a comparison:

https://github.com/corthon/edk2/compare/master...corthon:personal/brbarkel/var_policy_rfc_core

https://github.com/corthon/edk2/compare/personal/brbarkel/var_policy_rfc_core...corthon:personal/brbarkel/var_policy_rfc_extra

 

There’s additional documentation in the PPT and DOC files in the core branch:

https://github.com/corthon/edk2/blob/personal/brbarkel/var_policy_rfc_core/RFC%20VariablePolicy%20Proposal%20Presentation.pptx https://github.com/corthon/edk2/blob/personal/brbarkel/var_policy_rfc_core/RFC%20VariablePolicy%20Whitepaper.docx

(You’d need to download those to view.)

 

My ultimate intention for this is to submit it as a series of patches for acceptance into EDK2 as a replacement for VarLock. For now, I’m just looking for initial feedback on any broad changes that might be needed to get this into shape for more detailed code review on the devel list.

 

Thanks!

 

- Bret