Skip to content

Commit 5383af2

Browse files
committed
Fix tests and simplify DeviceEvent interface
1 parent 43080c1 commit 5383af2

File tree

15 files changed

+95
-141
lines changed

15 files changed

+95
-141
lines changed

mythril/src/emulate/memio.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ macro_rules! write_register {
2222
let request = MemReadRequest::new(&mut buff[..]);
2323
$vm.dispatch_event(
2424
$addr,
25-
DeviceEvent::MemRead(($addr, request)),
25+
DeviceEvent::MemRead($addr, request),
2626
$vcpu,
2727
$responses,
2828
)?;
@@ -184,7 +184,7 @@ fn do_mmio_write(
184184
let mut vm = vcpu.vm.write();
185185
vm.dispatch_event(
186186
addr,
187-
crate::virtdev::DeviceEvent::MemWrite((addr, request)),
187+
crate::virtdev::DeviceEvent::MemWrite(addr, request),
188188
vcpu,
189189
responses,
190190
)

mythril/src/emulate/portio.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ fn emulate_outs(
4141
let request = PortWriteRequest::try_from(chunk)?;
4242
vm.dispatch_event(
4343
port,
44-
DeviceEvent::PortWrite((port, request)),
44+
DeviceEvent::PortWrite(port, request),
4545
vcpu,
4646
responses,
4747
)?;
@@ -71,7 +71,7 @@ fn emulate_ins(
7171
let request = PortReadRequest::try_from(chunk)?;
7272
vm.dispatch_event(
7373
port,
74-
DeviceEvent::PortRead((port, request)),
74+
DeviceEvent::PortRead(port, request),
7575
vcpu,
7676
responses,
7777
)?;
@@ -105,7 +105,7 @@ pub fn emulate_portio(
105105
PortWriteRequest::try_from(&arr[4 - size as usize..])?;
106106
vm.dispatch_event(
107107
port,
108-
DeviceEvent::PortWrite((port, request)),
108+
DeviceEvent::PortWrite(port, request),
109109
vcpu,
110110
responses,
111111
)?;
@@ -115,7 +115,7 @@ pub fn emulate_portio(
115115
PortReadRequest::try_from(&mut arr[4 - size as usize..])?;
116116
vm.dispatch_event(
117117
port,
118-
DeviceEvent::PortRead((port, request)),
118+
DeviceEvent::PortRead(port, request),
119119
vcpu,
120120
responses,
121121
)?;

mythril/src/virtdev/acpi.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,15 @@ impl EmulatedDevice for AcpiRuntime {
6969

7070
fn on_event(&mut self, event: Event) -> Result<()> {
7171
match event.kind {
72-
DeviceEvent::PortRead((port, mut val)) => {
72+
DeviceEvent::PortRead(port, mut val) => {
7373
if port == self.pmtimer() {
7474
let on_duration = time::now() - time::system_start_time();
7575
let pm_time = (on_duration.as_nanos() * PMTIMER_HZ as u128)
7676
/ 1_000_000_000;
7777
val.copy_from_u32(pm_time as u32);
7878
}
7979
}
80-
DeviceEvent::PortWrite((port, val)) => {
80+
DeviceEvent::PortWrite(port, val) => {
8181
info!(
8282
"Attempt to write to AcpiRuntime port=0x{:x}, val={}. Ignoring",
8383
port, val

mythril/src/virtdev/com.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ impl EmulatedDevice for Uart8250 {
6767
);
6868
self.write(key)
6969
}
70-
DeviceEvent::PortRead((port, mut val)) => {
70+
DeviceEvent::PortRead(port, mut val) => {
7171
if port - self.base_port == SerialOffset::DATA
7272
&& !self.divisor_latch_bit_set()
7373
{
@@ -111,7 +111,7 @@ impl EmulatedDevice for Uart8250 {
111111
val.copy_from_u32(flags.bits() as u32);
112112
}
113113
}
114-
DeviceEvent::PortWrite((port, val)) => {
114+
DeviceEvent::PortWrite(port, val) => {
115115
let val: u8 = val.try_into()?;
116116
if port - self.base_port == SerialOffset::DATA {
117117
if self.divisor_latch_bit_set() {

mythril/src/virtdev/debug.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ impl EmulatedDevice for DebugPort {
2424

2525
fn on_event(&mut self, event: Event) -> Result<()> {
2626
match event.kind {
27-
DeviceEvent::PortRead((_port, mut val)) => {
27+
DeviceEvent::PortRead(_port, mut val) => {
2828
val.copy_from_u32(0xe9);
2929
}
30-
DeviceEvent::PortWrite((_port, val)) => {
30+
DeviceEvent::PortWrite(_port, val) => {
3131
event.responses.push(
3232
DeviceEventResponse::GuestUartTransmitted(val.try_into()?),
3333
);

mythril/src/virtdev/keyboard.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ impl EmulatedDevice for Keyboard8042 {
2626

2727
fn on_event(&mut self, event: Event) -> Result<()> {
2828
match event.kind {
29-
DeviceEvent::PortRead((_port, mut val)) => {
29+
DeviceEvent::PortRead(_port, mut val) => {
3030
//FIXME: For now just return 0xff for everything
3131
val.copy_from_u32(0xff);
3232
}

mythril/src/virtdev/mod.rs

Lines changed: 7 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,10 @@ pub type Port = u16;
3434
#[derive(Debug)]
3535
pub enum DeviceEvent<'a> {
3636
HostUartReceived(u8),
37-
MemRead((GuestPhysAddr, MemReadRequest<'a>)),
38-
MemWrite((GuestPhysAddr, MemWriteRequest<'a>)),
39-
PortRead((Port, PortReadRequest<'a>)),
40-
PortWrite((Port, PortWriteRequest<'a>)),
37+
MemRead(GuestPhysAddr, MemReadRequest<'a>),
38+
MemWrite(GuestPhysAddr, MemWriteRequest<'a>),
39+
PortRead(Port, PortReadRequest<'a>),
40+
PortWrite(Port, PortWriteRequest<'a>),
4141
}
4242

4343
#[derive(Debug)]
@@ -48,7 +48,6 @@ pub enum DeviceEventResponse {
4848

4949
pub struct Event<'a> {
5050
pub kind: DeviceEvent<'a>,
51-
pub vcpu: &'a vcpu::VCpu,
5251
pub space: GuestAddressSpaceViewMut<'a>,
5352
pub responses: &'a mut ResponseEventArray,
5453
}
@@ -57,12 +56,10 @@ impl<'a> Event<'a> {
5756
pub fn new(
5857
kind: DeviceEvent<'a>,
5958
space: GuestAddressSpaceViewMut<'a>,
60-
vcpu: &'a crate::vcpu::VCpu,
6159
responses: &'a mut ResponseEventArray,
6260
) -> Result<Self> {
6361
Ok(Event {
6462
kind,
65-
vcpu,
6663
responses,
6764
space,
6865
})
@@ -481,19 +478,9 @@ impl<'a> fmt::Display for MemReadRequest<'a> {
481478
#[cfg(test)]
482479
mod test {
483480
use super::*;
484-
use crate::memory::{
485-
GuestAddressSpace, GuestAddressSpaceViewMut, GuestPhysAddr,
486-
};
487481
use crate::virtdev::com::*;
488-
use alloc::boxed::Box;
489482
use core::convert::TryInto;
490483

491-
fn define_test_view() -> GuestAddressSpaceViewMut<'static> {
492-
let space: &'static mut GuestAddressSpace =
493-
Box::leak(Box::new(GuestAddressSpace::new().unwrap()));
494-
GuestAddressSpaceViewMut::new(GuestPhysAddr::new(0), space)
495-
}
496-
497484
// This is just a dummy device so we can have arbitrary port ranges
498485
// for testing.
499486
struct DummyDevice {
@@ -517,25 +504,10 @@ mod test {
517504
}
518505
}
519506

520-
#[test]
521-
fn test_memmap_write_to_portio_fails() {
522-
let view = define_test_view();
523-
let mut interrupts = InterruptArray::default();
524-
let com = Uart8250::new(0, 0);
525-
let addr = GuestPhysAddr::new(0);
526-
let data = [0u8; 4];
527-
let req = MemWriteRequest::new(&data);
528-
let mut com = com.write();
529-
assert_eq!(
530-
com.on_mem_write(addr, req, view, &mut interrupts).is_err(),
531-
true
532-
);
533-
}
534-
535507
#[test]
536508
fn test_device_map() {
537509
let mut map = DeviceMap::default();
538-
let com = Uart8250::new(0, 0);
510+
let com = Uart8250::new(0);
539511
map.register_device(com).unwrap();
540512
let _dev = map.find_device(0u16).unwrap();
541513

@@ -571,9 +543,9 @@ mod test {
571543
#[test]
572544
fn test_conflicting_portio_device() {
573545
let mut map = DeviceMap::default();
574-
let com = Uart8250::new(0, 0);
546+
let com = Uart8250::new(0);
575547
map.register_device(com).unwrap();
576-
let com = Uart8250::new(0, 0);
548+
let com = Uart8250::new(0);
577549

578550
assert!(map.register_device(com).is_err());
579551
}

0 commit comments

Comments
 (0)