From 06084ca239bdd74ee2579140bb9ffe05939207c4 Mon Sep 17 00:00:00 2001 From: Jiaqi Gao Date: Thu, 14 Mar 2024 02:12:54 -0400 Subject: [PATCH] tdx-tdcall: add `TDCALL_SYS_RD` call Used to read a TDX Module global-scope metadata field. Refer to section 'TDG.SYS.RD Leaf' of TDX Module v1.5 ABI spec. Signed-off-by: Jiaqi Gao --- tdx-tdcall/src/lib.rs | 1 + tdx-tdcall/src/tdx.rs | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/tdx-tdcall/src/lib.rs b/tdx-tdcall/src/lib.rs index 74807633..5484c5d9 100644 --- a/tdx-tdcall/src/lib.rs +++ b/tdx-tdcall/src/lib.rs @@ -39,6 +39,7 @@ const TDCALL_TDEXTENDRTMR: u64 = 2; const TDCALL_TDGETVEINFO: u64 = 3; const TDCALL_TDREPORT: u64 = 4; const TDCALL_TDACCEPTPAGE: u64 = 6; +const TDCALL_SYS_RD: u64 = 11; const TDCALL_SERVTD_RD: u64 = 18; const TDCALL_SERVTD_WR: u64 = 20; diff --git a/tdx-tdcall/src/tdx.rs b/tdx-tdcall/src/tdx.rs index 00d5f5b3..4cd246bf 100644 --- a/tdx-tdcall/src/tdx.rs +++ b/tdx-tdcall/src/tdx.rs @@ -672,6 +672,25 @@ pub fn tdcall_servtd_wr( Ok(result) } +/// Used to read a TDX Module global-scope metadata field. +/// +/// Details can be found in TDX Module v1.5 ABI spec section 'TDG.SYS.RD Leaf'. +pub fn tdcall_sys_rd(field_identifier: u64) -> core::result::Result<(u64, u64), TdCallError> { + let mut args = TdcallArgs { + rax: TDCALL_SYS_RD, + rdx: field_identifier, + ..Default::default() + }; + + let ret = td_call(&mut args); + + if ret != TDCALL_STATUS_SUCCESS { + return Err(ret.into()); + } + + Ok((args.rdx, args.r8)) +} + #[cfg(test)] mod tests { use super::*;