mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-04-28 09:00:46 +00:00
Correctly handle truncated dtb
This commit is contained in:
parent
0399cde50a
commit
e55c413261
@ -1,10 +1,7 @@
|
|||||||
use std::{cell::UnsafeCell, process::exit};
|
use std::{cell::UnsafeCell, process::exit};
|
||||||
|
|
||||||
use argh::FromArgs;
|
use argh::FromArgs;
|
||||||
use fdt::{
|
use fdt::{node::{FdtNode, NodeProperty}, Fdt, FdtError};
|
||||||
node::{FdtNode, NodeProperty},
|
|
||||||
Fdt,
|
|
||||||
};
|
|
||||||
|
|
||||||
use base::{
|
use base::{
|
||||||
libc::c_char, log_err, map_args, EarlyExitExt, LoggedResult, MappedFile, ResultExt, Utf8CStr,
|
libc::c_char, log_err, map_args, EarlyExitExt, LoggedResult, MappedFile, ResultExt, Utf8CStr,
|
||||||
@ -171,15 +168,17 @@ fn for_each_fdt<F: FnMut(usize, Fdt) -> LoggedResult<()>>(
|
|||||||
if slice.len() < 40 {
|
if slice.len() < 40 {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
let fdt = Fdt::new(slice)?;
|
let fdt = match Fdt::new(slice) {
|
||||||
|
Err(FdtError::BufferTooSmall) => {
|
||||||
|
eprintln!("dtb.{:04} is truncated", dtb_num);
|
||||||
|
break;
|
||||||
|
},
|
||||||
|
Ok(fdt) => fdt,
|
||||||
|
e => e?,
|
||||||
|
};
|
||||||
|
|
||||||
let size = fdt.total_size();
|
let size = fdt.total_size();
|
||||||
|
|
||||||
if size > slice.len() {
|
|
||||||
eprintln!("dtb.{:04} is truncated", dtb_num);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
f(dtb_num, fdt)?;
|
f(dtb_num, fdt)?;
|
||||||
|
|
||||||
dtb_num += 1;
|
dtb_num += 1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user