mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
xen/arm: bootfdt: Harden handling of malformed mem reserve map
The early_print_info routine in bootfdt.c incorrectly stores the result of a call to fdt_num_mem_rsv() in an unsigned int, which results in the negative error code being interpreted incorrectly in a subsequent loop in the case where the device tree is malformed. Fix this by properly checking the return code for an error and calling panic(). Signed-off-by: Shawn Anastasio <sanastasio@raptorengineering.com> Reviewed-by: Michal Orzel <michal.orzel@amd.com>
This commit is contained in:
1 parent
89c384c525
commit
410837189e
1 file changed
+5
-1
@@ -463,7 +463,8 @@ static void __init early_print_info(void)
|
||||
struct meminfo *mem_resv = &bootinfo.reserved_mem;
|
||||
struct bootmodules *mods = &bootinfo.modules;
|
||||
struct bootcmdlines *cmds = &bootinfo.cmdlines;
|
||||
unsigned int i, j, nr_rsvd;
|
||||
unsigned int i, j;
|
||||
int nr_rsvd;
|
||||
|
||||
for ( i = 0; i < mi->nr_banks; i++ )
|
||||
printk("RAM: %"PRIpaddr" - %"PRIpaddr"\n",
|
||||
@@ -478,6 +479,9 @@ static void __init early_print_info(void)
|
||||
boot_module_kind_as_string(mods->module[i].kind));
|
||||
|
||||
nr_rsvd = fdt_num_mem_rsv(device_tree_flattened);
|
||||
if ( nr_rsvd < 0 )
|
||||
panic("Parsing FDT memory reserve map failed (%d)\n", nr_rsvd);
|
||||
|
||||
for ( i = 0; i < nr_rsvd; i++ )
|
||||
{
|
||||
paddr_t s, e;
|
||||
|
||||