ARM: start: check for machine type last
PATCH 1/1 ARM: start: check for machine type last
A valid DTB may reside low in the Barebox binary address map. If this binary is started at a very low address, we might mistake the pointer for a machine type. Make sure to check for all other possibilities first before interpreting the boarddata as a raw machine type.
Fixes 19c24e2f0121 (ARM: start: Allow to pass machine type as boarddata)
Signed-off-by Lucas Stach <[email protected]>
--- arch/arm/cpu/start.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-)
arch/arm/cpu/start.c +11 -11
@@ -193,7 +193,17 @@ __noreturn void barebox_non_pbl_start(unsigned long membase,uint32_t totalsize =0 ;const char *name; -if ((unsigned long )boarddata <8192 ) { +if (blob_is_fdt (boarddata)) { + totalsize =get_unaligned_be32 (boarddata +4 ); + name ="DTB" ; + }else if (blob_is_compressed_fdt (boarddata)) { +struct barebox_arm_boarddata_compressed_dtb *bd = boarddata; + totalsize = bd->datalen +sizeof (*bd); + name ="Compressed DTB" ; + }else if (blob_is_arm_boarddata (boarddata)) { + totalsize =sizeof (struct barebox_arm_boarddata ); + name ="machine type" ; + }else if ((unsigned long )boarddata <8192 ) {struct barebox_arm_boarddata *bd;uint32_t machine_type = (unsigned long )boarddata; unsigned long mem = arm_mem_boarddata(membase, endmem,
@@ -205,16 +215,6 @@ __noreturn void barebox_non_pbl_start(unsigned long membase, bd->magic =BAREBOX_ARM_BOARDDATA_MAGIC ; bd->machine = machine_type; malloc_end = mem; - }else if (blob_is_fdt (boarddata)) { - totalsize =get_unaligned_be32 (boarddata +4 ); - name ="DTB" ; - }else if (blob_is_compressed_fdt (boarddata)) { -struct barebox_arm_boarddata_compressed_dtb *bd = boarddata; - totalsize = bd->datalen +sizeof (*bd); - name ="Compressed DTB" ; - }else if (blob_is_arm_boarddata (boarddata)) { - totalsize =sizeof (struct barebox_arm_boarddata ); - name ="machine type" ; }if (totalsize) {
Signature · 7 lines
2.23.0 _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox
Sascha Hauer
AppliedQuoted 10 lines · Lucas Stach
A valid DTB may reside low in the Barebox binary address map. If this binary is started at a very low address, we might mistake the pointer for a machine type. Make sure to check for all other possibilities first before interpreting the boarddata as a raw machine type.
Fixes 19c24e2f0121 (ARM: start: Allow to pass machine type as boarddata)Signed-off-by Lucas Stach <[email protected]>--- arch/arm/cpu/start.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-)
Applied, thanks
Sascha
Signature · 9 lines
Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox