For bootm, disallow booting an image that was built for an arch type
other than the current arch. For booti, set the arch type same as the
current arch.

Signed-off-by: Mayuresh Chitale <mchit...@ventanamicro.com>
---
 arch/riscv/lib/bootm.c | 4 ++++
 cmd/booti.c            | 5 ++++-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/arch/riscv/lib/bootm.c b/arch/riscv/lib/bootm.c
index 76c610bcee0..90f71bee6a5 100644
--- a/arch/riscv/lib/bootm.c
+++ b/arch/riscv/lib/bootm.c
@@ -94,6 +94,10 @@ static void boot_jump_linux(struct bootm_headers *images, 
int flag)
        announce_and_cleanup(fake);
 
        if (!fake) {
+               if (images->os.arch != IH_ARCH_DEFAULT) {
+                       printf("Image arch not compatible with host arch.\n");
+                       hang();
+               }
                if (CONFIG_IS_ENABLED(OF_LIBFDT) && images->ft_len) {
 #ifdef CONFIG_SMP
                        ret = smp_call_function(images->ep,
diff --git a/cmd/booti.c b/cmd/booti.c
index 1a57fe91397..00921ec4a9d 100644
--- a/cmd/booti.c
+++ b/cmd/booti.c
@@ -131,7 +131,10 @@ int do_booti(struct cmd_tbl *cmdtp, int flag, int argc, 
char *const argv[])
 
        images.os.os = IH_OS_LINUX;
        if (IS_ENABLED(CONFIG_RISCV_SMODE))
-               images.os.arch = IH_ARCH_RISCV;
+               if (IS_ENABLED(CONFIG_64BIT))
+                       images.os.arch = IH_ARCH_RISCV64;
+               else
+                       images.os.arch = IH_ARCH_RISCV;
        else if (IS_ENABLED(CONFIG_ARM64))
                images.os.arch = IH_ARCH_ARM64;
 
-- 
2.45.2

Reply via email to