Skip to content

Commit c506fc3

Browse files
committed
sev: drop bare SEV and default to SEV-ES
Bare SEV has been broken in libkrunfw for quite a while and, frankly, there's no good reason for using SEV over, at least, SEV-ES, since it's supported by every HW generation. Signed-off-by: Sergio Lopez <[email protected]>
1 parent 9088cd7 commit c506fc3

File tree

1 file changed

+10
-14
lines changed

1 file changed

+10
-14
lines changed

src/vmm/src/linux/tee/amdsev.rs

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ pub enum Error {
2727
DecodeAskArk,
2828
DecodeCek,
2929
DecodeChain,
30+
Deprecated,
3031
DownloadCek(curl::Error),
3132
DownloadAskArk(curl::Error),
3233
EncodeChain,
@@ -265,7 +266,6 @@ pub struct AmdSev {
265266
tee_config: TeeConfig,
266267
fw: Firmware,
267268
start: Start,
268-
sev_es: bool,
269269
curl_agent: Arc<Mutex<CurlAgent>>,
270270
}
271271

@@ -274,7 +274,6 @@ impl AmdSev {
274274
let mut fw = Firmware::open().map_err(Error::OpenFirmware)?;
275275
let mut curl_agent = CurlAgent::new();
276276
let chain = get_and_store_chain(&mut fw, tee_config, &mut curl_agent)?;
277-
let mut sev_es = false;
278277

279278
let start = if !tee_config.attestation_url.is_empty() {
280279
let build = fw
@@ -305,18 +304,22 @@ impl AmdSev {
305304
let sev_challenge: SevChallenge = serde_json::from_value(challenge.extra_params)
306305
.map_err(Error::ParseSessionResponse)?;
307306

308-
if sev_challenge
307+
if !sev_challenge
309308
.start
310309
.policy
311310
.flags
312311
.contains(PolicyFlags::ENCRYPTED_STATE)
313312
{
314-
sev_es = true;
313+
error!("SEV without ES is no longer supported. Please switch to SEV-ES or SNP");
314+
return Err(Error::Deprecated);
315315
}
316316

317317
sev_challenge.start
318318
} else {
319-
let policy = Policy::default();
319+
let policy = Policy {
320+
flags: PolicyFlags::ENCRYPTED_STATE,
321+
..Default::default()
322+
};
320323
let session = Session::try_from(policy).map_err(Error::SessionFromPolicy)?;
321324
session.start(chain).map_err(Error::StartFromSession)?
322325
};
@@ -325,7 +328,6 @@ impl AmdSev {
325328
tee_config: tee_config.clone(),
326329
fw,
327330
start,
328-
sev_es,
329331
curl_agent: Arc::new(Mutex::new(curl_agent)),
330332
})
331333
}
@@ -366,11 +368,7 @@ impl AmdSev {
366368
let vm_rfd = vm_fd.as_raw_fd();
367369
let fw_rfd = self.fw.as_raw_fd();
368370

369-
let launcher = if self.sev_es {
370-
Launcher::new_es(vm_rfd, fw_rfd).unwrap()
371-
} else {
372-
Launcher::new(vm_rfd, fw_rfd).unwrap()
373-
};
371+
let launcher = Launcher::new_es(vm_rfd, fw_rfd).unwrap();
374372

375373
for region in guest_mem.iter() {
376374
// It's safe to unwrap because the guest address is valid.
@@ -401,9 +399,7 @@ impl AmdSev {
401399
.map_err(Error::SevLaunchUpdateData)?;
402400
}
403401

404-
if self.sev_es {
405-
launcher.update_vmsa().unwrap()
406-
}
402+
launcher.update_vmsa().unwrap();
407403

408404
let mut launcher = launcher.measure().unwrap();
409405
let measurement = launcher.measurement();

0 commit comments

Comments
 (0)