7
7
use std:: marker:: PhantomData ;
8
8
use std:: mem:: size_of;
9
9
10
- use vm_memory:: { Address , ByteValued , Bytes , GuestAddress , GuestMemory , GuestUsize } ;
10
+ use vm_memory:: {
11
+ Address , ByteValued , Bytes , GuestAddress , GuestMemory , GuestMemoryError , GuestUsize ,
12
+ } ;
11
13
12
14
use crate :: defs:: { VIRTQ_AVAIL_ELEMENT_SIZE , VIRTQ_AVAIL_RING_HEADER_SIZE } ;
13
15
use crate :: { Descriptor , DescriptorChain , Error , Queue , QueueOwnedT , QueueT , VirtqUsedElem } ;
@@ -23,6 +25,8 @@ pub enum MockError {
23
25
InvalidIndex ,
24
26
/// Invalid next avail
25
27
InvalidNextAvail ,
28
+ /// Guest memory errors
29
+ GuestMem ( GuestMemoryError ) ,
26
30
}
27
31
28
32
impl Display for MockError {
@@ -39,6 +43,7 @@ impl Display for MockError {
39
43
f,
40
44
"invalid next available descriptor chain head in the queue"
41
45
) ,
46
+ GuestMem ( e) => write ! ( f, "guest memory error: {}" , e) ,
42
47
}
43
48
}
44
49
}
@@ -425,7 +430,7 @@ impl<'a, M: GuestMemory> MockSplitQueue<'a, M> {
425
430
self . create_queue :: < Queue > ( )
426
431
. map_err ( MockError :: InvalidQueueParams ) ?
427
432
. iter ( self . mem )
428
- . unwrap ( )
433
+ . map_err ( MockError :: InvalidQueueParams ) ?
429
434
. next ( )
430
435
. ok_or ( MockError :: InvalidNextAvail )
431
436
}
@@ -466,7 +471,7 @@ impl<'a, M: GuestMemory> MockSplitQueue<'a, M> {
466
471
. mem
467
472
. read_obj :: < u16 > ( self . avail_addr ( ) . unchecked_add ( 2 ) )
468
473
. map ( u16:: from_le)
469
- . unwrap ( ) ;
474
+ . map_err ( MockError :: GuestMem ) ? ;
470
475
471
476
for ( idx, desc) in descs. iter ( ) . enumerate ( ) {
472
477
let i = idx as u16 + offset;
@@ -482,7 +487,7 @@ impl<'a, M: GuestMemory> MockSplitQueue<'a, M> {
482
487
+ ( avail_idx + new_entries) as u64 * VIRTQ_AVAIL_ELEMENT_SIZE ,
483
488
) ,
484
489
)
485
- . unwrap ( ) ;
490
+ . map_err ( MockError :: GuestMem ) ? ;
486
491
new_entries += 1 ;
487
492
}
488
493
}
@@ -493,7 +498,7 @@ impl<'a, M: GuestMemory> MockSplitQueue<'a, M> {
493
498
u16:: to_le ( avail_idx + new_entries) ,
494
499
self . avail_addr ( ) . unchecked_add ( 2 ) ,
495
500
)
496
- . unwrap ( ) ;
501
+ . map_err ( MockError :: GuestMem ) ? ;
497
502
498
503
Ok ( ( ) )
499
504
}
0 commit comments