File tree Expand file tree Collapse file tree 3 files changed +20
-14
lines changed
Expand file tree Collapse file tree 3 files changed +20
-14
lines changed Original file line number Diff line number Diff line change 11use intel_fw:: {
2+ EMPTY ,
23 ifd:: { IFD , IfdError } ,
34 me:: ME ,
45 part:: part:: ClearOptions ,
@@ -19,7 +20,7 @@ pub fn clean(
1920 me : & ME ,
2021 data : & mut [ u8 ] ,
2122 options : Options ,
22- ) -> Result < Vec < u8 > , String > {
23+ ) -> Result < ( Vec < u8 > , Option < Vec < u8 > > ) , String > {
2324 if ( options. disable_me || options. disable_me_only )
2425 && let Ok ( ifd) = ifd
2526 {
@@ -36,7 +37,7 @@ pub fn clean(
3637 data[ ..size] . copy_from_slice ( & new_ifd) ;
3738 }
3839 if options. disable_me_only {
39- return Ok ( data. to_vec ( ) ) ;
40+ return Ok ( ( data. to_vec ( ) , None ) ) ;
4041 }
4142 }
4243 let mut new_me = me. clone ( ) ;
@@ -55,7 +56,12 @@ pub fn clean(
5556 Ok ( cleaned) => {
5657 let size = cleaned. len ( ) ;
5758 data[ me. base ..me. base + size] . copy_from_slice ( & cleaned) ;
58- Ok ( data. to_vec ( ) )
59+
60+ // Fill up to fully cover the FPT area, clear out remaining bytes.
61+ let original_size = new_me. fpt_area . original_size ;
62+ data[ me. base + size..me. base + original_size] . fill ( EMPTY ) ;
63+
64+ Ok ( ( data. to_vec ( ) , Some ( cleaned) ) )
5965 }
6066 Err ( e) => Err ( e) ,
6167 }
Original file line number Diff line number Diff line change @@ -220,7 +220,7 @@ fn main() -> Result<(), io::Error> {
220220 parts_force_deletion : blacklist. unwrap_or ( vec ! [ ] ) ,
221221 } ;
222222 match clean:: clean ( & fw. ifd , & me, & mut data, opts) {
223- Ok ( data) => {
223+ Ok ( ( data, me_data ) ) => {
224224 if let Some ( f) = output {
225225 let mut f = fs:: File :: create ( f) ?;
226226 f. write_all ( & data) ?;
@@ -235,8 +235,12 @@ fn main() -> Result<(), io::Error> {
235235 }
236236 if let Some ( f) = extract_me {
237237 let mut f = fs:: File :: create ( f) ?;
238- let me_range = ifd. regions . me_range ( ) ;
239- f. write_all ( & data[ me_range] ) ?;
238+ if truncate && let Some ( me_data) = me_data {
239+ f. write_all ( & me_data) ?;
240+ } else {
241+ let me_range = ifd. regions . me_range ( ) ;
242+ f. write_all ( & data[ me_range] ) ?;
243+ }
240244 }
241245 }
242246 }
Original file line number Diff line number Diff line change @@ -191,16 +191,12 @@ impl FPTArea {
191191 }
192192
193193 let mut res = self . partitions . to_vec ( ) ?;
194+ // Round to next 4k
195+ let min_size = res. len ( ) . next_multiple_of ( 4096 ) ;
194196 if debug {
195- println ! ( " Minimum size: {:08x}" , res. len( ) ) ;
196- }
197- // Restore the original size, so that the resulting slice fully covers
198- // the FPT area. The resulting bytes can be used to overwrite the region
199- // in a given image, e.g., after cleaning or other partition changes.
200- res. resize ( self . original_size , EMPTY ) ;
201- if debug {
202- println ! ( " Restored size: {:08x}" , res. len( ) ) ;
197+ println ! ( " Minimum size: {:08x}" , min_size) ;
203198 }
199+ res. resize ( min_size, EMPTY ) ;
204200
205201 // Any range within the FPT area may be non-covered.
206202 for u in & self . non_covered {
You can’t perform that action at this time.
0 commit comments