[PATCH v2] lib: sbi_domain: Avoid overwriting coldboot hart's scratch->arg1
Bin Meng
bmeng at tinylab.org
Thu Feb 23 01:53:48 PST 2023
In sbi_domain_finalize(), when locating the coldboot hart's domain,
the coldboot hart's scratch->arg1 will be overwritten by the domain
configuration. scratch->arg1 holds the FDT address of the coldboot
hart, and in later boot process OpenSBI codes still read the FDT
here and there, which leads 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 at nxp.com>
Signed-off-by: Bin Meng <bmeng at tinylab.org>
---
Changes in v2:
- Change fdt_get_address() to return root.next_arg1
include/sbi_utils/fdt/fdt_helper.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/include/sbi_utils/fdt/fdt_helper.h b/include/sbi_utils/fdt/fdt_helper.h
index 09f3095..e17b906 100644
--- a/include/sbi_utils/fdt/fdt_helper.h
+++ b/include/sbi_utils/fdt/fdt_helper.h
@@ -12,6 +12,7 @@
#include <sbi/sbi_types.h>
#include <sbi/sbi_scratch.h>
+#include <sbi/sbi_domain.h>
struct fdt_match {
const char *compatible;
@@ -109,7 +110,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__ */
--
2.25.1
More information about the opensbi
mailing list