Skip to content

Commit ef7cd63

Browse files
author
Juliette Pretot
committed
Shutdown with UEFI error code if a remote attestation error occurs
1 parent 03ca895 commit ef7cd63

File tree

2 files changed

+12
-6
lines changed

2 files changed

+12
-6
lines changed

experimental/uefi/app/src/main.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,12 @@ fn serial_echo(handle: Handle, bt: &BootServices, index: usize) -> Result<!, uef
103103
}
104104
de::Error::RecursionLimitExceeded => uefi::Error::from(Status::ABORTED),
105105
})?;
106-
let response = attestation_handler.message(MOCK_SESSION_ID, msg);
106+
let response = attestation_handler
107+
.message(MOCK_SESSION_ID, msg)
108+
.map_err(|err| {
109+
error!("Error handling remote attestation: {:?}", err);
110+
uefi::Error::from(Status::PROTOCOL_ERROR)
111+
})?;
107112
ser::into_writer(&response, &mut serial).map_err(|err| match err {
108113
ser::Error::Io(err) => err,
109114
ser::Error::Value(msg) => {

experimental/uefi/app/src/remote_attestation.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
//! crate. TODO(#2741): Refactor this to share more code between the two runtimes.
2222
2323
use alloc::vec::Vec;
24+
use anyhow::Context;
2425
use oak_remote_attestation_sessions::{SessionId, SessionState, SessionTracker};
2526

2627
/// Number of sessions that will be kept in memory.
@@ -51,7 +52,7 @@ where
5152
}
5253
}
5354

54-
pub fn message(&mut self, session_id: SessionId, request: Vec<u8>) -> Vec<u8> {
55+
pub fn message(&mut self, session_id: SessionId, request: Vec<u8>) -> anyhow::Result<Vec<u8>> {
5556
let mut session_state = {
5657
self.session_tracker
5758
.pop_session_state(session_id)
@@ -61,7 +62,7 @@ where
6162
SessionState::HandshakeInProgress(ref mut handshaker) => {
6263
handshaker
6364
.next_step(&request)
64-
.expect("Couldn't process handshake message")
65+
.context("Couldn't process handshake message")?
6566
// After receiving a valid `ClientIdentity` message
6667
// (the last step of the key exchange)
6768
// ServerHandshaker.next_step returns `None`. For unary
@@ -73,19 +74,19 @@ where
7374
SessionState::EncryptedMessageExchange(ref mut encryptor) => {
7475
let decrypted_request = encryptor
7576
.decrypt(&request)
76-
.expect("Couldn't decrypt response");
77+
.context("Couldn't decrypt response")?;
7778

7879
let response = (self.request_handler.clone())(decrypted_request);
7980

8081
encryptor
8182
.encrypt(&response)
82-
.expect("Couldn't encrypt response")
83+
.context("Couldn't encrypt response")?
8384
}
8485
};
8586

8687
self.session_tracker
8788
.put_session_state(session_id, session_state);
8889

89-
response_body
90+
Ok(response_body)
9091
}
9192
}

0 commit comments

Comments
 (0)