Skip to content

Commit 39c5840

Browse files
authored
Merge pull request #523 from msft-jlange/cet-ap-startup
svsm: Enable CET on the target processor
2 parents 0fbac9f + c99743a commit 39c5840

File tree

5 files changed

+18
-19
lines changed

5 files changed

+18
-19
lines changed

kernel/src/cpu/percpu.rs

-3
Original file line numberDiff line numberDiff line change
@@ -739,9 +739,6 @@ impl PerCpu {
739739
vmsa.tr = self.vmsa_tr_segment();
740740
vmsa.rip = start_rip;
741741
vmsa.rsp = self.get_top_of_stack().into();
742-
if is_cet_ss_supported() {
743-
vmsa.ssp = self.get_top_of_shadow_stack().into();
744-
}
745742
vmsa.cr3 = self.get_pgtable().cr3_value().into();
746743
vmsa.enable();
747744

kernel/src/cpu/shadow_stack.rs

-2
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,6 @@ pub fn is_cet_ss_supported() -> bool {
6161
macro_rules! enable_shadow_stacks {
6262
($bsp_percpu:ident) => {{
6363
use core::arch::asm;
64-
use svsm::address::Address;
65-
use svsm::cpu::shadow_stack::{SCetFlags, MODE_64BIT, S_CET};
6664

6765
let token_addr = $bsp_percpu.get_top_of_shadow_stack();
6866

kernel/src/cpu/smp.rs

+11-2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,11 @@
55
// Author: Joerg Roedel <[email protected]>
66

77
use crate::acpi::tables::ACPICPUInfo;
8+
use crate::address::Address;
89
use crate::cpu::percpu::{this_cpu, this_cpu_shared, PerCpu};
10+
use crate::cpu::shadow_stack::{is_cet_ss_supported, SCetFlags, MODE_64BIT, S_CET};
911
use crate::cpu::sse::sse_init;
12+
use crate::enable_shadow_stacks;
1013
use crate::error::SvsmError;
1114
use crate::platform::SvsmPlatform;
1215
use crate::platform::SVSM_PLATFORM;
@@ -39,11 +42,17 @@ pub fn start_secondary_cpus(platform: &dyn SvsmPlatform, cpus: &[ACPICPUInfo]) {
3942

4043
#[no_mangle]
4144
fn start_ap() {
42-
this_cpu()
45+
let percpu = this_cpu();
46+
47+
if is_cet_ss_supported() {
48+
enable_shadow_stacks!(percpu);
49+
}
50+
51+
percpu
4352
.setup_on_cpu(&**SVSM_PLATFORM)
4453
.expect("setup_on_cpu() failed");
4554

46-
this_cpu()
55+
percpu
4756
.setup_idle_task(ap_request_loop)
4857
.expect("Failed to allocated idle task for AP");
4958

kernel/src/cpu/vmsa.rs

-4
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ use super::control_regs::{read_cr0, read_cr3, read_cr4};
1313
use super::efer::read_efer;
1414
use super::gdt;
1515
use super::idt::common::idt;
16-
use super::shadow_stack::{is_cet_ss_supported, read_s_cet};
1716

1817
fn svsm_code_segment() -> VMSASegment {
1918
VMSASegment {
@@ -67,9 +66,6 @@ pub fn init_svsm_vmsa(vmsa: &mut VMSA, vtom: u64) {
6766
vmsa.cr3 = read_cr3().bits() as u64;
6867
vmsa.cr4 = read_cr4().bits();
6968
vmsa.efer = read_efer().bits();
70-
if is_cet_ss_supported() {
71-
vmsa.s_cet = read_s_cet().bits();
72-
}
7369

7470
vmsa.rflags = 0x2;
7571
vmsa.dr6 = 0xffff0ff0;

kernel/src/svsm.rs

+7-8
Original file line numberDiff line numberDiff line change
@@ -7,32 +7,31 @@
77
#![cfg_attr(not(test), no_std)]
88
#![cfg_attr(not(test), no_main)]
99

10-
use svsm::cpu::shadow_stack::{determine_cet_support, is_cet_ss_supported};
11-
use svsm::enable_shadow_stacks;
12-
use svsm::fw_meta::{print_fw_meta, validate_fw_memory, SevFWMetaData};
13-
1410
use bootlib::kernel_launch::KernelLaunchInfo;
1511
use core::arch::global_asm;
1612
use core::panic::PanicInfo;
1713
use core::slice;
1814
use cpuarch::snp_cpuid::SnpCpuidTable;
19-
use svsm::address::{PhysAddr, VirtAddr};
15+
use svsm::address::{Address, PhysAddr, VirtAddr};
2016
use svsm::config::SvsmConfig;
2117
use svsm::console::install_console_logger;
2218
use svsm::cpu::control_regs::{cr0_init, cr4_init};
2319
use svsm::cpu::cpuid::{dump_cpuid_table, register_cpuid_table};
2420
use svsm::cpu::gdt;
2521
use svsm::cpu::idt::svsm::{early_idt_init, idt_init};
26-
use svsm::cpu::percpu::current_ghcb;
27-
use svsm::cpu::percpu::PerCpu;
28-
use svsm::cpu::percpu::{this_cpu, this_cpu_shared};
22+
use svsm::cpu::percpu::{current_ghcb, this_cpu, this_cpu_shared, PerCpu};
23+
use svsm::cpu::shadow_stack::{
24+
determine_cet_support, is_cet_ss_supported, SCetFlags, MODE_64BIT, S_CET,
25+
};
2926
use svsm::cpu::smp::start_secondary_cpus;
3027
use svsm::cpu::sse::sse_init;
3128
use svsm::debug::gdbstub::svsm_gdbstub::{debug_break, gdbstub_start};
3229
use svsm::debug::stacktrace::print_stack;
30+
use svsm::enable_shadow_stacks;
3331
use svsm::error::SvsmError;
3432
use svsm::fs::{initialize_fs, populate_ram_fs};
3533
use svsm::fw_cfg::FwCfg;
34+
use svsm::fw_meta::{print_fw_meta, validate_fw_memory, SevFWMetaData};
3635
use svsm::igvm_params::IgvmParams;
3736
use svsm::kernel_region::new_kernel_region;
3837
use svsm::mm::alloc::{memory_info, print_memory_info, root_mem_init};

0 commit comments

Comments
 (0)