dm: core: Correct bad cast in ofnode_get_addr_size_index()
authorSimon Glass <sjg@chromium.org>
Wed, 25 Sep 2019 14:55:50 +0000 (08:55 -0600)
committerBin Meng <bmeng.cn@gmail.com>
Thu, 3 Oct 2019 13:10:53 +0000 (21:10 +0800)
At present this code passes an fdt_addr_t pointer as a u64 pointer which
is not safe, since sizeof(fdt_addr_t) may be 4, e.g. with sandbox. Correct
this to avoid a stack corruption problem.

Fixes: e679d03b08 (core: ofnode: Add ofnode_get_addr_size_index)
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
[bmeng: correct one typo in the commit message]
Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
drivers/core/ofnode.c

index 5d47eccf1d1f6f29464f203203fa067d7fda2e72..297f0a0c7cc142880b41539e979b081972e16f16 100644 (file)
@@ -261,12 +261,15 @@ fdt_addr_t ofnode_get_addr_size_index(ofnode node, int index, fdt_size_t *size)
 
        if (ofnode_is_np(node)) {
                const __be32 *prop_val;
+               u64 size64;
                uint flags;
 
-               prop_val = of_get_address(ofnode_to_np(node), index,
-                                         (u64 *)size, &flags);
+               prop_val = of_get_address(ofnode_to_np(node), index, &size64,
+                                         &flags);
                if (!prop_val)
                        return FDT_ADDR_T_NONE;
+               if (size)
+                       *size = size64;
 
                ns = of_n_size_cells(ofnode_to_np(node));