AMD Grub Late Launcher¶
Purpose¶
The intent of this project is to extend Grub with the ability to call the AMD SKINIT instruction.
Background¶
The AMD SKINIT instruction is a means to initiate a "late launch" that establishes a Dynamic Root of Trust Measurement (DRTM). The instruction call requires the system to be in a specific state as enumerated below,
- SVM check, either the
EFER.SVME
bit is set to 1 or the feature flagCPUID Fn8000_0001_ECX[SKINIT]
is set to 1 - The CPU must be in protected mode
Approach¶
Grub will be extended with the following capabilities,
- Extend the late launch loader,
- determine CPU type and select SKINIT or SENTER path
- load kernel (with modules, if applicable) as usual
- verify SVM is supported
- load Secure Kernel Loader and check if it is valid
- allocate and fill Secure Launch Resource Table
- send INIT IPI to all APs
- disable all TPM localities
- An SKINIT relocator that will,
- set protected mode
- set registers as required by SKINIT
- execute SKINIT as final instruction