Skip to content

Commit

Permalink
igvmbld: Add segment selectors to initial VMSA
Browse files Browse the repository at this point in the history
The initial VMSA populates the segment registers but does not set values
for the selectors. The current IGVM loader in QEMU requires the
selectors to be set correctly to start the guest. This patch sets the
selectors to the values expected by the SVSM.

Signed-off-by: Roy Hopkins <roy.hopkins@suse.com>
  • Loading branch information
roy-hopkins committed Dec 20, 2023
1 parent 9f61c13 commit 11d8121
Showing 1 changed file with 6 additions and 0 deletions.
6 changes: 6 additions & 0 deletions igvmbld/igvmbld.c
Original file line number Diff line number Diff line change
Expand Up @@ -327,14 +327,20 @@ void generate_initial_vmsa(SEV_VMSA *vmsa)
// Establish CS as a 32-bit code selector.
vmsa->segments[SevSegment_Cs].attributes = 0xC9B;
vmsa->segments[SevSegment_Cs].limit = 0xFFFFFFFF;
vmsa->segments[SevSegment_Cs].selector = 0x08;

// Establish all data segments as generic data selectors.
vmsa->segments[SevSegment_Ds].attributes = 0xA93;
vmsa->segments[SevSegment_Ds].limit = 0xFFFFFFFF;
vmsa->segments[SevSegment_Ds].selector = 0x10;
vmsa->segments[SevSegment_Ss] = vmsa->segments[SevSegment_Ds];
vmsa->segments[SevSegment_Ss].selector = 0x10;
vmsa->segments[SevSegment_Es] = vmsa->segments[SevSegment_Ds];
vmsa->segments[SevSegment_Es].selector = 0x10;
vmsa->segments[SevSegment_Fs] = vmsa->segments[SevSegment_Ds];
vmsa->segments[SevSegment_Fs].selector = 0x10;
vmsa->segments[SevSegment_Gs] = vmsa->segments[SevSegment_Ds];
vmsa->segments[SevSegment_Gs].selector = 0x10;

// EFER.SVME.
vmsa->efer = 0x1000;
Expand Down

0 comments on commit 11d8121

Please sign in to comment.