diff options
author | Bin Meng <bmeng@tinylab.org> | 2023-02-23 13:40:09 +0300 |
---|---|---|
committer | Anup Patel <anup@brainfault.org> | 2023-02-27 07:34:03 +0300 |
commit | 99d09b601eb3809a4cc2aa409da34bc4fe32f67f (patch) | |
tree | 8d614f25b7f5240c03518318d4f41019aaff8a80 /include/sbi_utils | |
parent | 745aaecc64dcae0cfb7e40702a173100af94d582 (diff) | |
download | opensbi-99d09b601eb3809a4cc2aa409da34bc4fe32f67f.tar.xz |
include: fdt/fdt_helper: Change fdt_get_address() to return root.next_arg1
In sbi_domain_finalize(), when locating the coldboot hart's domain,
the coldboot hart's scratch->arg1 will be overwritten by the domain
configuration. However scratch->arg1 holds the FDT address of the
coldboot hart, and is still being accessed by fdt_get_address() in
later boot process. scratch->arg1 could then contain completely
garbage and lead to a crash.
To fix this, we change fdt_get_address() to return root domain's
next_arg1 as the FDT pointer.
Resolves: https://github.com/riscv-software-src/opensbi/issues/281
Fixes: b1678af210dc ("lib: sbi: Add initial domain support")
Reported-by: Marouene Boubakri <marouene.boubakri@nxp.com>
Signed-off-by: Bin Meng <bmeng@tinylab.org>
Reviewed-by: Anup Patel <anup@brainfault.org>
Diffstat (limited to 'include/sbi_utils')
-rw-r--r-- | include/sbi_utils/fdt/fdt_helper.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/include/sbi_utils/fdt/fdt_helper.h b/include/sbi_utils/fdt/fdt_helper.h index 09f3095..39d7f3a 100644 --- a/include/sbi_utils/fdt/fdt_helper.h +++ b/include/sbi_utils/fdt/fdt_helper.h @@ -11,7 +11,7 @@ #define __FDT_HELPER_H__ #include <sbi/sbi_types.h> -#include <sbi/sbi_scratch.h> +#include <sbi/sbi_domain.h> struct fdt_match { const char *compatible; @@ -109,7 +109,7 @@ int fdt_parse_compat_addr(void *fdt, uint64_t *addr, static inline void *fdt_get_address(void) { - return sbi_scratch_thishart_arg1_ptr(); + return (void *)root.next_arg1; } #endif /* __FDT_HELPER_H__ */ |