@@ -46,7 +46,7 @@ impl GuestMemoryMmap {
46
46
// ANCHOR: read_obj
47
47
fn read_obj < T > ( & self , addr : GuestAddress ) -> Result < T , Error >
48
48
where
49
- T : ByteValued + kani:: Invariant + ReadObjChecks < T > ,
49
+ T : ByteValued + kani:: Arbitrary + ReadObjChecks < T > ,
50
50
// This generic_const_exprs feature lets Rust know the size of generic T.
51
51
[ ( ) ; std:: mem:: size_of :: < T > ( ) ] : ,
52
52
{
@@ -64,9 +64,9 @@ impl GuestMemoryMmap {
64
64
#[ derive( Default , Clone , Copy ) ]
65
65
pub struct GuestAddress ( pub u64 ) ;
66
66
67
- unsafe impl kani:: Invariant for GuestAddress {
68
- fn is_valid ( & self ) -> bool {
69
- true
67
+ impl kani:: Arbitrary for GuestAddress {
68
+ fn any ( ) -> Self {
69
+ GuestAddress ( kani :: any ( ) )
70
70
}
71
71
}
72
72
@@ -91,9 +91,9 @@ struct Descriptor {
91
91
92
92
unsafe impl ByteValued for Descriptor { }
93
93
94
- unsafe impl kani:: Invariant for Descriptor {
95
- fn is_valid ( & self ) -> bool {
96
- true
94
+ impl kani:: Arbitrary for Descriptor {
95
+ fn any ( ) -> Self {
96
+ Descriptor { addr : kani :: any ( ) , len : kani :: any ( ) , flags : kani :: any ( ) , next : kani :: any ( ) }
97
97
}
98
98
}
99
99
@@ -218,14 +218,15 @@ impl RequestHeader {
218
218
pub fn new ( request_type : u32 , sector : u64 ) -> RequestHeader {
219
219
RequestHeader { request_type, _reserved : 0 , sector }
220
220
}
221
+
221
222
fn read_from ( memory : & GuestMemoryMmap , addr : GuestAddress ) -> Result < Self , Error > {
222
223
memory. read_obj ( addr)
223
224
}
224
225
}
225
226
226
- unsafe impl kani:: Invariant for RequestHeader {
227
- fn is_valid ( & self ) -> bool {
228
- true
227
+ impl kani:: Arbitrary for RequestHeader {
228
+ fn any ( ) -> Self {
229
+ RequestHeader { request_type : kani :: any ( ) , _reserved : kani :: any ( ) , sector : kani :: any ( ) }
229
230
}
230
231
}
231
232
@@ -296,24 +297,24 @@ pub enum Error {
296
297
Persist , /*(crate::virtio::persist::Error)*/
297
298
}
298
299
299
- unsafe impl kani:: Invariant for Error {
300
- fn is_valid ( & self ) -> bool {
301
- matches ! (
302
- * self ,
303
- Error :: DescriptorChainTooShort
304
- | Error :: DescriptorLengthTooSmall
305
- | Error :: GetFileMetadata
306
- | Error :: GuestMemory
307
- | Error :: InvalidDataLength
308
- | Error :: InvalidOffset
309
- | Error :: UnexpectedReadOnlyDescriptor
310
- | Error :: UnexpectedWriteOnlyDescriptor
311
- | Error :: FileEngine
312
- | Error :: BackingFile
313
- | Error :: EventFd
314
- | Error :: IrqTrigger
315
- | Error :: RateLimiter
316
- ) || matches ! ( * self , Error :: Persist )
300
+ impl kani:: Arbitrary for Error {
301
+ fn any ( ) -> Error {
302
+ match kani :: any ( ) {
303
+ 0 => Error :: DescriptorChainTooShort ,
304
+ 1 => Error :: DescriptorLengthTooSmall ,
305
+ 2 => Error :: GetFileMetadata ,
306
+ 3 => Error :: GuestMemory ,
307
+ 4 => Error :: InvalidDataLength ,
308
+ 5 => Error :: InvalidOffset ,
309
+ 6 => Error :: UnexpectedReadOnlyDescriptor ,
310
+ 7 => Error :: UnexpectedWriteOnlyDescriptor ,
311
+ 8 => Error :: FileEngine ,
312
+ 9 => Error :: BackingFile ,
313
+ 10 => Error :: EventFd ,
314
+ 11 => Error :: IrqTrigger ,
315
+ 12 => Error :: RateLimiter ,
316
+ _ => Error :: Persist ,
317
+ }
317
318
}
318
319
}
319
320
0 commit comments