From 2362ce6cd4ed47c0c30745e36293d4edeb99a60f Mon Sep 17 00:00:00 2001 From: Mark Poliakov Date: Mon, 11 Oct 2021 18:35:42 +0300 Subject: [PATCH] feat: meaningful fdt init errors --- kernel/src/dev/fdt.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/kernel/src/dev/fdt.rs b/kernel/src/dev/fdt.rs index d7cce37..073e7ff 100644 --- a/kernel/src/dev/fdt.rs +++ b/kernel/src/dev/fdt.rs @@ -7,10 +7,10 @@ use fdt_rs::{ #[repr(align(16))] struct Wrap { - data: [u8; 16384], + data: [u8; 65536], } -static mut INDEX_BUFFER: Wrap = Wrap { data: [0; 16384] }; +static mut INDEX_BUFFER: Wrap = Wrap { data: [0; 65536] }; type INode<'a> = DevTreeIndexNode<'a, 'a, 'a>; @@ -51,7 +51,7 @@ fn dump_node(node: &INode, depth: usize) { } } debug!(">"); - }, + } _ => debug!("..."), } debugln!(";"); @@ -76,8 +76,12 @@ impl DeviceTree { pub fn from_phys(base: usize) -> Result { // TODO virtualize address - let tree = unsafe { DevTree::from_raw_pointer(base as *const _) }.unwrap(); + let tree = unsafe { DevTree::from_raw_pointer(base as *const _) } + .map_err(|_| Errno::InvalidArgument)?; let layout = DevTreeIndex::get_layout(&tree).unwrap(); + if layout.size() + layout.align() >= unsafe { INDEX_BUFFER.data.len() } { + return Err(Errno::OutOfMemory); + } let index = DevTreeIndex::new(tree, unsafe { &mut INDEX_BUFFER.data[0..layout.size() + layout.align()] })