diff mbox series

[v2] xen/arm: bootfdt: Harden handling of malformed mem reserve map

Message ID 20240111232422.2610495-1-sanastasio@raptorengineering.com (mailing list archive)
State New, archived
Headers show
Series [v2] xen/arm: bootfdt: Harden handling of malformed mem reserve map | expand

Commit Message

Shawn Anastasio Jan. 11, 2024, 11:24 p.m. UTC
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>
---
v2:
  - panic() if the fdt_num_mem_rsv() call fails
  - Reword commit message to clarify that the error condition can only
  be triggered by a malformed device tree
  - Rebase to standalone patch instead of a part of my patch series
  '[PATCH v2 0/7] Early Boot Allocation on Power'

---
 xen/arch/arm/bootfdt.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

--
2.30.2

Comments

Michal Orzel Jan. 12, 2024, 8:56 a.m. UTC | #1
On 12/01/2024 00:24, Shawn Anastasio wrote:
> 
> 
> 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>

~Michal
Julien Grall Jan. 12, 2024, 11:05 a.m. UTC | #2
Hi,

On 12/01/2024 08:56, Michal Orzel wrote:
> 
> 
> On 12/01/2024 00:24, Shawn Anastasio wrote:
>>
>>
>> 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>

Committed.

Cheers,
diff mbox series

Patch

diff --git a/xen/arch/arm/bootfdt.c b/xen/arch/arm/bootfdt.c
index 1cbac3cb2a..35dbdf3384 100644
--- a/xen/arch/arm/bootfdt.c
+++ b/xen/arch/arm/bootfdt.c
@@ -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;