diff --git a/src/lib.rs b/src/lib.rs index 9143309..83bf50a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -199,6 +199,14 @@ impl EntryPoint { InvalidEntryPointError::BadSize(sub_buffer.len() as u8) ); let_as_struct!(entry_point, EntryPointV2, sub_buffer); + let entry_point = EntryPointV2 { + signature: u32::from_le(entry_point.signature), + struct_max: u16::from_le(entry_point.struct_max), + smbios_len: u16::from_le(entry_point.smbios_len), + smbios_address: u32::from_le(entry_point.smbios_address), + smbios_count: u16::from_le(entry_point.smbios_count), + ..entry_point + }; lib_ensure!( entry_point.len as usize >= mem::size_of::(), InvalidEntryPointError::BadSize(entry_point.len) @@ -211,6 +219,11 @@ impl EntryPoint { InvalidEntryPointError::BadSize(sub_buffer.len() as u8) ); let_as_struct!(entry_point, EntryPointV3, sub_buffer); + let entry_point = EntryPointV3 { + smbios_len_max: u32::from_le(entry_point.smbios_len_max), + smbios_address: u64::from_le(entry_point.smbios_address), + ..entry_point + }; lib_ensure!( entry_point.len as usize >= mem::size_of::(), InvalidEntryPointError::BadSize(entry_point.len) @@ -528,6 +541,10 @@ impl<'buffer> Structures<'buffer> { let working = &self.buffer[(self.idx as usize)..]; let_as_struct!(header, HeaderPacked, working); + let header = HeaderPacked { + handle: u16::from_le(header.handle), + ..header + }; let strings_idx: u32 = self.idx + header.len as u32; if strings_idx >= self.smbios_len { diff --git a/src/structures/000_bios.rs b/src/structures/000_bios.rs index c566d60..a6037db 100644 --- a/src/structures/000_bios.rs +++ b/src/structures/000_bios.rs @@ -132,13 +132,13 @@ impl<'buffer> Bios<'buffer> { handle: structure.handle, vendor: structure.find_string(packed.vendor)?, bios_version: structure.find_string(packed.bios_version)?, - bios_starting_address_segment: packed.bios_starting_address_segment, + bios_starting_address_segment: u16::from_le(packed.bios_starting_address_segment), bios_release_date: structure.find_string(packed.bios_release_date)?, rom_size: RomSize { basic: packed.bios_rom_size, - extended: Some(packed.extended_bios_rom_size), + extended: Some(u16::from_le(packed.extended_bios_rom_size)), }, - bios_characteristics: Characteristics(packed.bios_characteristics), + bios_characteristics: Characteristics(u64::from_le(packed.bios_characteristics)), bios_characteristics_exttension_1: Some(CharacteristicsExtension1( packed.bios_characteristics_exttension_1, )), @@ -161,13 +161,13 @@ impl<'buffer> Bios<'buffer> { handle: structure.handle, vendor: structure.find_string(packed.vendor)?, bios_version: structure.find_string(packed.bios_version)?, - bios_starting_address_segment: packed.bios_starting_address_segment, + bios_starting_address_segment: u16::from_le(packed.bios_starting_address_segment), bios_release_date: structure.find_string(packed.bios_release_date)?, rom_size: RomSize { basic: packed.bios_rom_size, extended: None, }, - bios_characteristics: Characteristics(packed.bios_characteristics), + bios_characteristics: Characteristics(u64::from_le(packed.bios_characteristics)), bios_characteristics_exttension_1: Some(CharacteristicsExtension1( packed.bios_characteristics_exttension_1, )), @@ -190,13 +190,13 @@ impl<'buffer> Bios<'buffer> { handle: structure.handle, vendor: structure.find_string(packed.vendor)?, bios_version: structure.find_string(packed.bios_version)?, - bios_starting_address_segment: packed.bios_starting_address_segment, + bios_starting_address_segment: u16::from_le(packed.bios_starting_address_segment), bios_release_date: structure.find_string(packed.bios_release_date)?, rom_size: RomSize { basic: packed.bios_rom_size, extended: None, }, - bios_characteristics: Characteristics(packed.bios_characteristics), + bios_characteristics: Characteristics(u64::from_le(packed.bios_characteristics)), bios_characteristics_exttension_1: None, bios_characteristics_exttension_2: None, bios_revision: None, diff --git a/src/structures/002_baseboard.rs b/src/structures/002_baseboard.rs index df02bbd..e8049c9 100644 --- a/src/structures/002_baseboard.rs +++ b/src/structures/002_baseboard.rs @@ -135,7 +135,7 @@ impl<'buffer> BaseBoard<'buffer> { None }; let chassis_handle = if structure.data.len() > 7 { - Some(packed.chassis_handle) + Some(u16::from_le(packed.chassis_handle)) } else { None }; diff --git a/src/structures/003_enclosure.rs b/src/structures/003_enclosure.rs index a50ede4..4e850f2 100644 --- a/src/structures/003_enclosure.rs +++ b/src/structures/003_enclosure.rs @@ -244,7 +244,7 @@ impl<'buffer> Enclosure<'buffer> { }) // Optional 2.3+ fields .and_then(|oem_defined: u32| { - enclosure.oem_defined = Some(oem_defined); + enclosure.oem_defined = Some(u32::from_le(oem_defined)); read_bytes(data) }) .and_then(|height: u8| { diff --git a/src/structures/004_processor.rs b/src/structures/004_processor.rs index 7489fd0..b6d1729 100644 --- a/src/structures/004_processor.rs +++ b/src/structures/004_processor.rs @@ -624,12 +624,12 @@ impl<'buffer> Processor<'buffer> { processor_type: packed.processor_type.into(), processor_family: packed.processor_family.into(), processor_manufacturer: structure.find_string(packed.processor_manufacturer)?, - processor_id: packed.processor_id, + processor_id: u64::from_le(packed.processor_id), processor_version: structure.find_string(packed.processor_version)?, voltage: packed.voltage.into(), - external_clock: packed.external_clock, - max_speed: packed.max_speed, - current_speed: packed.current_speed, + external_clock: u16::from_le(packed.external_clock), + max_speed: u16::from_le(packed.max_speed), + current_speed: u16::from_le(packed.current_speed), status: ProcessorStatus::from_bits_truncate(packed.status), processor_upgrade: packed.processor_upgrade.into(), l1_cache_handle: None, @@ -652,17 +652,17 @@ impl<'buffer> Processor<'buffer> { processor_type: packed.processor_type.into(), processor_family: packed.processor_family.into(), processor_manufacturer: structure.find_string(packed.processor_manufacturer)?, - processor_id: packed.processor_id, + processor_id: u64::from_le(packed.processor_id), processor_version: structure.find_string(packed.processor_version)?, voltage: packed.voltage.into(), - external_clock: packed.external_clock, - max_speed: packed.max_speed, - current_speed: packed.current_speed, + external_clock: u16::from_le(packed.external_clock), + max_speed: u16::from_le(packed.max_speed), + current_speed: u16::from_le(packed.current_speed), status: ProcessorStatus::from_bits_truncate(packed.status), processor_upgrade: packed.processor_upgrade.into(), - l1_cache_handle: Some(packed.l1_cache_handle), - l2_cache_handle: Some(packed.l2_cache_handle), - l3_cache_handle: Some(packed.l3_cache_handle), + l1_cache_handle: Some(u16::from_le(packed.l1_cache_handle)), + l2_cache_handle: Some(u16::from_le(packed.l2_cache_handle)), + l3_cache_handle: Some(u16::from_le(packed.l3_cache_handle)), serial_number: None, asset_tag: None, part_number: None, @@ -680,17 +680,17 @@ impl<'buffer> Processor<'buffer> { processor_type: packed.processor_type.into(), processor_family: packed.processor_family.into(), processor_manufacturer: structure.find_string(packed.processor_manufacturer)?, - processor_id: packed.processor_id, + processor_id: u64::from_le(packed.processor_id), processor_version: structure.find_string(packed.processor_version)?, voltage: packed.voltage.into(), - external_clock: packed.external_clock, - max_speed: packed.max_speed, - current_speed: packed.current_speed, + external_clock: u16::from_le(packed.external_clock), + max_speed: u16::from_le(packed.max_speed), + current_speed: u16::from_le(packed.current_speed), status: ProcessorStatus::from_bits_truncate(packed.status), processor_upgrade: packed.processor_upgrade.into(), - l1_cache_handle: Some(packed.l1_cache_handle), - l2_cache_handle: Some(packed.l2_cache_handle), - l3_cache_handle: Some(packed.l3_cache_handle), + l1_cache_handle: Some(u16::from_le(packed.l1_cache_handle)), + l2_cache_handle: Some(u16::from_le(packed.l2_cache_handle)), + l3_cache_handle: Some(u16::from_le(packed.l3_cache_handle)), serial_number: Some(structure.find_string(packed.serial_number)?), asset_tag: Some(structure.find_string(packed.asset_tag)?), part_number: Some(structure.find_string(packed.part_number)?), @@ -708,17 +708,17 @@ impl<'buffer> Processor<'buffer> { processor_type: packed.processor_type.into(), processor_family: packed.processor_family.into(), processor_manufacturer: structure.find_string(packed.processor_manufacturer)?, - processor_id: packed.processor_id, + processor_id: u64::from_le(packed.processor_id), processor_version: structure.find_string(packed.processor_version)?, voltage: packed.voltage.into(), - external_clock: packed.external_clock, - max_speed: packed.max_speed, - current_speed: packed.current_speed, + external_clock: u16::from_le(packed.external_clock), + max_speed: u16::from_le(packed.max_speed), + current_speed: u16::from_le(packed.current_speed), status: ProcessorStatus::from_bits_truncate(packed.status), processor_upgrade: packed.processor_upgrade.into(), - l1_cache_handle: Some(packed.l1_cache_handle), - l2_cache_handle: Some(packed.l2_cache_handle), - l3_cache_handle: Some(packed.l3_cache_handle), + l1_cache_handle: Some(u16::from_le(packed.l1_cache_handle)), + l2_cache_handle: Some(u16::from_le(packed.l2_cache_handle)), + l3_cache_handle: Some(u16::from_le(packed.l3_cache_handle)), serial_number: Some(structure.find_string(packed.serial_number)?), asset_tag: Some(structure.find_string(packed.asset_tag)?), part_number: Some(structure.find_string(packed.part_number)?), @@ -732,7 +732,7 @@ impl<'buffer> Processor<'buffer> { // smbios spec specifies 0xFE as an indicator to obtain processor // family from the Processor Family 2 field. let processor_family = match packed.processor_family.into() { - ProcessorFamily::ProcessorFamily2 => packed.processor_family_2.into(), + ProcessorFamily::ProcessorFamily2 => u16::from_le(packed.processor_family_2).into(), family => family, }; Ok(Processor { @@ -741,33 +741,33 @@ impl<'buffer> Processor<'buffer> { processor_type: packed.processor_type.into(), processor_family, processor_manufacturer: structure.find_string(packed.processor_manufacturer)?, - processor_id: packed.processor_id, + processor_id: u64::from_le(packed.processor_id), processor_version: structure.find_string(packed.processor_version)?, voltage: packed.voltage.into(), - external_clock: packed.external_clock, - max_speed: packed.max_speed, - current_speed: packed.current_speed, + external_clock: u16::from_le(packed.external_clock), + max_speed: u16::from_le(packed.max_speed), + current_speed: u16::from_le(packed.current_speed), status: ProcessorStatus::from_bits_truncate(packed.status), processor_upgrade: packed.processor_upgrade.into(), - l1_cache_handle: Some(packed.l1_cache_handle), - l2_cache_handle: Some(packed.l2_cache_handle), - l3_cache_handle: Some(packed.l3_cache_handle), + l1_cache_handle: Some(u16::from_le(packed.l1_cache_handle)), + l2_cache_handle: Some(u16::from_le(packed.l2_cache_handle)), + l3_cache_handle: Some(u16::from_le(packed.l3_cache_handle)), serial_number: Some(structure.find_string(packed.serial_number)?), asset_tag: Some(structure.find_string(packed.asset_tag)?), part_number: Some(structure.find_string(packed.part_number)?), core_count: Some(packed.core_count as u16), core_enabled: Some(packed.core_enabled as u16), thread_count: Some(packed.thread_count as u16), - processor_characteristics: Some(ProcessorCharacteristics::from_bits_truncate( + processor_characteristics: Some(ProcessorCharacteristics::from_bits_truncate(u16::from_le( packed.processor_characteristics, - )), + ))), }) } else { let_as_struct!(packed, ProcessorPacked3_0, structure.data); // smbios spec specifies 0xFE as an indicator to obtain processor // family from the Processor Family 2 field. let processor_family = match packed.processor_family.into() { - ProcessorFamily::ProcessorFamily2 => packed.processor_family_2.into(), + ProcessorFamily::ProcessorFamily2 => u16::from_le(packed.processor_family_2).into(), family => family, }; @@ -777,17 +777,17 @@ impl<'buffer> Processor<'buffer> { // // The rule is same for Core Enabled and Thread Count as well. let core_count = if packed.core_count == 0xFF { - Some(packed.core_count_2) + Some(u16::from_le(packed.core_count_2)) } else { Some(packed.core_count as u16) }; let core_enabled = if packed.core_enabled == 0xFF { - Some(packed.core_enabled_2) + Some(u16::from_le(packed.core_enabled_2)) } else { Some(packed.core_enabled as u16) }; let thread_count = if packed.thread_count == 0xFF { - Some(packed.thread_count_2) + Some(u16::from_le(packed.thread_count_2)) } else { Some(packed.thread_count as u16) }; @@ -797,26 +797,26 @@ impl<'buffer> Processor<'buffer> { processor_type: packed.processor_type.into(), processor_family, processor_manufacturer: structure.find_string(packed.processor_manufacturer)?, - processor_id: packed.processor_id, + processor_id: u64::from_le(packed.processor_id), processor_version: structure.find_string(packed.processor_version)?, voltage: packed.voltage.into(), - external_clock: packed.external_clock, - max_speed: packed.max_speed, - current_speed: packed.current_speed, + external_clock: u16::from_le(packed.external_clock), + max_speed: u16::from_le(packed.max_speed), + current_speed: u16::from_le(packed.current_speed), status: ProcessorStatus::from_bits_truncate(packed.status), processor_upgrade: packed.processor_upgrade.into(), - l1_cache_handle: Some(packed.l1_cache_handle), - l2_cache_handle: Some(packed.l2_cache_handle), - l3_cache_handle: Some(packed.l3_cache_handle), + l1_cache_handle: Some(u16::from_le(packed.l1_cache_handle)), + l2_cache_handle: Some(u16::from_le(packed.l2_cache_handle)), + l3_cache_handle: Some(u16::from_le(packed.l3_cache_handle)), serial_number: Some(structure.find_string(packed.serial_number)?), asset_tag: Some(structure.find_string(packed.asset_tag)?), part_number: Some(structure.find_string(packed.part_number)?), core_count, core_enabled, thread_count, - processor_characteristics: Some(ProcessorCharacteristics::from_bits_truncate( + processor_characteristics: Some(ProcessorCharacteristics::from_bits_truncate(u16::from_le( packed.processor_characteristics, - )), + ))), }) } } diff --git a/src/structures/007_cache.rs b/src/structures/007_cache.rs index 7b1c8b7..7555566 100644 --- a/src/structures/007_cache.rs +++ b/src/structures/007_cache.rs @@ -217,17 +217,17 @@ impl<'buffer> Cache<'buffer> { Ok(Cache { handle: structure.handle, socket_designation: structure.find_string(packed.socket_designation)?, - cache_configuration: packed.cache_configuration.into(), - maximum_cache_size: packed.maximum_cache_size.into(), - installed_size: packed.installed_size.into(), - supported_sram_type: CacheSramType::from_bits_truncate(packed.supported_sram_type), - current_sram_type: CacheSramType::from_bits_truncate(packed.current_sram_type), + cache_configuration: u16::from_le(packed.cache_configuration).into(), + maximum_cache_size: u16::from_le(packed.maximum_cache_size).into(), + installed_size: u16::from_le(packed.installed_size).into(), + supported_sram_type: CacheSramType::from_bits_truncate(u16::from_le(packed.supported_sram_type)), + current_sram_type: CacheSramType::from_bits_truncate(u16::from_le(packed.current_sram_type)), cache_speed: Some(packed.cache_speed), error_correction_type: Some(packed.error_correction_type.into()), system_cache_type: Some(packed.system_cache_type.into()), associativity: Some(packed.associativity.into()), - maximum_cache_size_2: Some(packed.maximum_cache_size_2.into()), - installed_size_2: Some(packed.installed_size_2.into()), + maximum_cache_size_2: Some(u32::from_le(packed.maximum_cache_size_2).into()), + installed_size_2: Some(u32::from_le(packed.installed_size_2).into()), }) } v if v > (2, 1).into() => { @@ -235,11 +235,11 @@ impl<'buffer> Cache<'buffer> { Ok(Cache { handle: structure.handle, socket_designation: structure.find_string(packed.socket_designation)?, - cache_configuration: packed.cache_configuration.into(), - maximum_cache_size: packed.maximum_cache_size.into(), - installed_size: packed.installed_size.into(), - supported_sram_type: CacheSramType::from_bits_truncate(packed.supported_sram_type), - current_sram_type: CacheSramType::from_bits_truncate(packed.current_sram_type), + cache_configuration: u16::from_le(packed.cache_configuration).into(), + maximum_cache_size: u16::from_le(packed.maximum_cache_size).into(), + installed_size: u16::from_le(packed.installed_size).into(), + supported_sram_type: CacheSramType::from_bits_truncate(u16::from_le(packed.supported_sram_type)), + current_sram_type: CacheSramType::from_bits_truncate(u16::from_le(packed.current_sram_type)), cache_speed: Some(packed.cache_speed), error_correction_type: Some(packed.error_correction_type.into()), system_cache_type: Some(packed.system_cache_type.into()), @@ -253,11 +253,11 @@ impl<'buffer> Cache<'buffer> { Ok(Cache { handle: structure.handle, socket_designation: structure.find_string(packed.socket_designation)?, - cache_configuration: packed.cache_configuration.into(), - maximum_cache_size: packed.maximum_cache_size.into(), - installed_size: packed.installed_size.into(), - supported_sram_type: CacheSramType::from_bits_truncate(packed.supported_sram_type), - current_sram_type: CacheSramType::from_bits_truncate(packed.current_sram_type), + cache_configuration: u16::from_le(packed.cache_configuration).into(), + maximum_cache_size: u16::from_le(packed.maximum_cache_size).into(), + installed_size: u16::from_le(packed.installed_size).into(), + supported_sram_type: CacheSramType::from_bits_truncate(u16::from_le(packed.supported_sram_type)), + current_sram_type: CacheSramType::from_bits_truncate(u16::from_le(packed.current_sram_type)), cache_speed: None, error_correction_type: None, system_cache_type: None, diff --git a/src/structures/009_system_slots.rs b/src/structures/009_system_slots.rs index 3e32189..76086eb 100644 --- a/src/structures/009_system_slots.rs +++ b/src/structures/009_system_slots.rs @@ -799,7 +799,7 @@ impl<'a> From<&'a [u8]> for Device { fn from(data: &'a [u8]) -> Device { let_as_struct!(packed, DevicePacked, data); Device { - segment_group_number: packed.segment_group_number, + segment_group_number: u16::from_le(packed.segment_group_number), bus_number: packed.bus_number, device_and_function_number: packed.dev_and_fun_number.into(), data_bus_width: packed.data_bus_width, @@ -808,7 +808,7 @@ impl<'a> From<&'a [u8]> for Device { } impl<'a> From<&'a Device> for [u8; 5] { fn from(d: &'a Device) -> [u8; 5] { - let segment = d.segment_group_number.to_ne_bytes(); + let segment = d.segment_group_number.to_le_bytes(); [ segment[0], segment[1],