diff --git a/src/config.rs b/src/config.rs index 6c36930..75c59b6 100644 --- a/src/config.rs +++ b/src/config.rs @@ -25,7 +25,13 @@ pub struct Config { #[serde(default = "Defaults::unlock_migration")] pub unlock_migration: bool, #[serde(default)] - pub pci_info_map: Option>, + pub pci_info_map: Option>, +} + +#[derive(Deserialize)] +pub struct PciInfoMapEntry { + pub device_id: u16, + pub sub_system_id: u16, } impl Default for Config { diff --git a/src/lib.rs b/src/lib.rs index 3005477..f61a0b7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -490,11 +490,8 @@ pub unsafe extern "C" fn ioctl(fd: RawFd, request: c_ulong, argp: *mut c_void) - let actual_device_id = (orig_device_id & 0xffff0000) >> 16; let actual_sub_system_id = (orig_sub_system_id & 0xffff0000) >> 16; - let (spoofed_devid, spoofed_subsysid) = if let Some(mapped_id) = mapped_id { - let device_id = (mapped_id & 0xffff0000) >> 16; - let sub_system_id = mapped_id & 0xffff; - - (device_id, sub_system_id) + let (spoofed_devid, spoofed_subsysid) = if let Some(mapping) = mapped_id { + (mapping.device_id as u32, mapping.sub_system_id as u32) } else { match actual_device_id { // Maxwell