(index: u32, digest: [u8; 48])
| 258 | } |
| 259 | |
| 260 | fn extend_rtmr_via_ioctl(index: u32, digest: [u8; 48]) -> Result<()> { |
| 261 | let file = OpenOptions::new() |
| 262 | .read(true) |
| 263 | .write(true) |
| 264 | .open(TDX_GUEST_DEVICE) |
| 265 | .map_err(|e| TdxAttestError::ExtendFailure(format!("open {TDX_GUEST_DEVICE}: {e}")))?; |
| 266 | |
| 267 | let req = TdxExtendRtmrReq { |
| 268 | data: digest, |
| 269 | index: index as u8, |
| 270 | }; |
| 271 | |
| 272 | let ret = unsafe { libc::ioctl(file.as_raw_fd(), tdx_cmd_extend_rtmr(), &req) }; |
| 273 | if ret != 0 { |
| 274 | let err = std::io::Error::last_os_error(); |
| 275 | let errno = err.raw_os_error().unwrap_or(0); |
| 276 | if errno == libc::EINVAL { |
| 277 | return Err(TdxAttestError::InvalidRtmrIndex(index)); |
| 278 | } |
| 279 | return Err(TdxAttestError::ExtendFailure(format!("ioctl: {err}"))); |
| 280 | } |
| 281 | |
| 282 | Ok(()) |
| 283 | } |
| 284 | |
| 285 | // ============================================================================ |
| 286 | // ConfigFS Quote Generation |
no test coverage detected