@@ -95,35 +95,10 @@ pub fn align_up(size: usize) -> usize {
9595// VERIFICATION -------------------------------------------------------------------------------------------------------
9696#[ cfg( kani) ]
9797mod verification {
98- use crate :: MemMapEntry ;
98+ use crate :: mem :: alloc :: MAX_ADDR ;
9999
100100 use super :: * ;
101- use kani:: Arbitrary ;
102-
103- impl Arbitrary for MemMapEntry {
104- fn any ( ) -> Self {
105- let size = size_of :: < MemMapEntry > ( ) as u32 ;
106- let length = kani:: any ( ) ;
107- let addr = kani:: any ( ) ;
108-
109- kani:: assume (
110- length < alloc:: MAX_ADDR as u64
111- && length > alloc:: BestFitAllocator :: MIN_RANGE_SIZE as u64 ,
112- ) ;
113- kani:: assume ( addr < alloc:: MAX_ADDR as u64 - length && addr > 0 ) ;
114-
115- MemMapEntry {
116- size,
117- addr,
118- length,
119- ty : kani:: any ( ) ,
120- }
121- }
122-
123- fn any_array < const MAX_ARRAY_LENGTH : usize > ( ) -> [ Self ; MAX_ARRAY_LENGTH ] {
124- [ ( ) ; MAX_ARRAY_LENGTH ] . map ( |_| Self :: any ( ) )
125- }
126- }
101+ use interface:: { Args , InitDescriptor , MemMapEntry } ;
127102
128103 fn mock_ptr_write < T > ( dst : * mut T , src : T ) {
129104 // Just a noop
@@ -135,13 +110,22 @@ mod verification {
135110 let mmap: [ MemMapEntry ; _] = kani:: any ( ) ;
136111
137112 kani:: assume ( mmap. len ( ) > 0 && mmap. len ( ) <= 8 ) ;
113+ // Apply constraints to all
138114 for entry in mmap. iter ( ) {
139115 // Ensure aligned.
140116 kani:: assume ( entry. addr % align_of :: < u128 > ( ) as u64 == 0 ) ;
141117 // Ensure valid range.
142118 kani:: assume ( entry. addr > 0 ) ;
143119 kani:: assume ( entry. length > 0 ) ;
144120
121+ kani:: assume (
122+ entry. length < alloc:: MAX_ADDR as u64
123+ && entry. length > alloc:: BestFitAllocator :: MIN_RANGE_SIZE as u64 ,
124+ ) ;
125+ kani:: assume ( entry. addr < alloc:: MAX_ADDR as u64 - entry. length && entry. addr > 0 ) ;
126+ }
127+
128+ for entry in mmap. iter ( ) {
145129 // Ensure non overlapping entries
146130 for other in mmap. iter ( ) {
147131 if entry. addr != other. addr {
@@ -153,13 +137,20 @@ mod verification {
153137 }
154138 }
155139
156- let mmap_len = mmap. len ( ) ;
140+ let mmap_len = mmap. len ( ) as u64 ;
157141
158142 let boot_info = BootInfo {
159- implementer : core :: ptr :: null ( ) ,
160- variant : core :: ptr :: null ( ) ,
143+ magic : interface :: BOOT_INFO_MAGIC ,
144+ version : kani :: any ( ) ,
161145 mmap,
162146 mmap_len,
147+ args : Args {
148+ init : InitDescriptor {
149+ begin : kani:: any ( ) ,
150+ len : kani:: any ( ) ,
151+ entry_offset : kani:: any ( ) ,
152+ } ,
153+ } ,
163154 } ;
164155
165156 assert ! ( init_memory( & boot_info) . is_ok( ) ) ;
0 commit comments