@@ -63,36 +63,41 @@ fn alloc_alignment() {
63
63
fn memory_map ( bt : & BootServices ) {
64
64
info ! ( "Testing memory map functions" ) ;
65
65
66
- let mut memory_map = bt
67
- . memory_map ( MemoryType :: LOADER_DATA )
68
- . expect ( "Failed to retrieve UEFI memory map" ) ;
66
+ // Ensure that the memory map is freed after each iteration (on drop).
67
+ // Otherwise, we will have an OOM.
68
+ for _ in 0 ..200000 {
69
+ let mut memory_map = bt
70
+ . memory_map ( MemoryType :: LOADER_DATA )
71
+ . expect ( "Failed to retrieve UEFI memory map" ) ;
69
72
70
- memory_map. sort ( ) ;
73
+ memory_map. sort ( ) ;
71
74
72
- // Collect the descriptors into a vector
73
- let descriptors = memory_map. entries ( ) . copied ( ) . collect :: < Vec < _ > > ( ) ;
75
+ // Collect the descriptors into a vector
76
+ let descriptors = memory_map. entries ( ) . copied ( ) . collect :: < Vec < _ > > ( ) ;
74
77
75
- // Ensured we have at least one entry.
76
- // Real memory maps usually have dozens of entries.
77
- assert ! ( !descriptors. is_empty( ) , "Memory map is empty" ) ;
78
+ // Ensured we have at least one entry.
79
+ // Real memory maps usually have dozens of entries.
80
+ assert ! ( !descriptors. is_empty( ) , "Memory map is empty" ) ;
78
81
79
- let mut curr_value = descriptors[ 0 ] ;
82
+ let mut curr_value = descriptors[ 0 ] ;
80
83
81
- for value in descriptors. iter ( ) . skip ( 1 ) {
82
- if value. phys_start <= curr_value. phys_start {
83
- panic ! ( "memory map sorting failed" ) ;
84
+ for value in descriptors. iter ( ) . skip ( 1 ) {
85
+ if value. phys_start <= curr_value. phys_start {
86
+ panic ! ( "memory map sorting failed" ) ;
87
+ }
88
+ curr_value = * value;
84
89
}
85
- curr_value = * value;
86
- }
87
90
88
- // This is pretty much a sanity test to ensure returned memory isn't filled with random values.
89
- let first_desc = descriptors[ 0 ] ;
91
+ // This is pretty much a basic sanity test to ensure returned memory
92
+ // isn't filled with random values.
93
+ let first_desc = descriptors[ 0 ] ;
90
94
91
- #[ cfg( target_arch = "x86_64" ) ]
92
- {
93
- let phys_start = first_desc. phys_start ;
94
- assert_eq ! ( phys_start, 0 , "Memory does not start at address 0" ) ;
95
+ #[ cfg( target_arch = "x86_64" ) ]
96
+ {
97
+ let phys_start = first_desc. phys_start ;
98
+ assert_eq ! ( phys_start, 0 , "Memory does not start at address 0" ) ;
99
+ }
100
+ let page_count = first_desc. page_count ;
101
+ assert ! ( page_count != 0 , "Memory map entry has size zero" ) ;
95
102
}
96
- let page_count = first_desc. page_count ;
97
- assert ! ( page_count != 0 , "Memory map entry has zero size" ) ;
98
103
}
0 commit comments