Skip to content

Commit 1880200

Browse files
committed
sample of sigill in rustc
1 parent 365065d commit 1880200

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

igvm/src/lib.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -949,6 +949,46 @@ pub enum BinaryHeaderError {
949949
UnsupportedAArch64Register(#[from] registers::UnsupportedRegister<HvArm64RegisterName>),
950950
}
951951

952+
#[inline(never)]
953+
fn write_snp_vp_context_header(
954+
header: &IgvmDirectiveHeader,
955+
variable_headers: &mut Vec<u8>,
956+
file_data: &mut FileDataSerializer,
957+
) -> Result<(), BinaryHeaderError> {
958+
let IgvmDirectiveHeader::SnpVpContext { gpa, compatibility_mask, vp_index, vmsa } = header
959+
else {
960+
panic!("Not vp context")
961+
};
962+
// GPA must be 4k aligned.
963+
assert_eq!(gpa % PAGE_SIZE_4K, 0);
964+
965+
// Pad file data to 4K.
966+
let align_up_iter =
967+
std::iter::repeat(&0u8).take(PAGE_SIZE_4K as usize - vmsa.as_bytes().len());
968+
let data: Vec<u8> = vmsa.as_bytes().iter().chain(align_up_iter).copied().collect();
969+
let file_offset = file_data.write_file_data(&data);
970+
971+
let info = IGVM_VHS_VP_CONTEXT {
972+
gpa: u64_le::new(*gpa),
973+
compatibility_mask: *compatibility_mask,
974+
file_offset,
975+
vp_index: *vp_index,
976+
reserved: 0,
977+
};
978+
979+
append_header(&info, IgvmVariableHeaderType::IGVM_VHT_VP_CONTEXT, variable_headers);
980+
981+
Ok(())
982+
}
983+
984+
#[test]
985+
fn test_write_snp_vp_context_header() {
986+
let header = IgvmDirectiveHeader::SnpVpContext { gpa: 0x4000, compatibility_mask: 0x1, vp_index: 4, vmsa: SevVmsa::new_box_zeroed().unwrap() };
987+
let mut variable_headers = vec![];
988+
let mut file_data = FileDataSerializer::new(10000);
989+
write_snp_vp_context_header(&header, &mut variable_headers, &mut file_data);
990+
}
991+
952992
impl IgvmDirectiveHeader {
953993
/// Get the binary variable header size of the given type.
954994
fn header_size(&self) -> usize {

0 commit comments

Comments
 (0)