[PATCH master] ARM: uncompress: keep handoff data aligned

Ahmad Fatoum <[email protected]>
Newsgroups org.infradead.lists.barebox
Message-ID <[email protected]>
A pointer to the handoff data is passed from PBL to barebox proper
as argument, but it may end up unaligned depending on uncompressed_len.

Round that up to 8 bytes to make sure, it doesn't end up misaligned.

Signed-off-by: Ahmad Fatoum <[email protected]>
---
 arch/arm/cpu/uncompress.c          | 2 +-
 arch/arm/include/asm/barebox-arm.h | 3 ++-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/arch/arm/cpu/uncompress.c b/arch/arm/cpu/uncompress.c
index db6cd7fa11d7..61bcba6e8549 100644
--- a/arch/arm/cpu/uncompress.c
+++ b/arch/arm/cpu/uncompress.c
@@ -73,7 +73,7 @@ void __noreturn barebox_pbl_start(unsigned long membase, unsigned long memsize,
 	barebox_base = arm_mem_barebox_image(membase, endmem,
 					     uncompressed_len, NULL);
 
-	handoff_data = (void *)barebox_base + uncompressed_len + MAX_BSS_SIZE;
+	handoff_data = (void *)barebox_base + ALIGN(uncompressed_len, 8) + MAX_BSS_SIZE;
 
 	pbl_malloc_init(barebox_base - PBL_MALLOC_SIZE, PBL_MALLOC_SIZE);
 
diff --git a/arch/arm/include/asm/barebox-arm.h b/arch/arm/include/asm/barebox-arm.h
index 9349e62fdec6..38cceba010ed 100644
--- a/arch/arm/include/asm/barebox-arm.h
+++ b/arch/arm/include/asm/barebox-arm.h
@@ -193,7 +193,8 @@ static inline unsigned long arm_mem_barebox_image(unsigned long membase,
 						  const struct handoff_data *handoff_data)
 {
 #ifdef __PBL__
-	unsigned long size = uncompressed_len + MAX_BSS_SIZE + __handoff_data_size(handoff_data);
+	unsigned long size = ALIGN(uncompressed_len, 8) +
+		MAX_BSS_SIZE + __handoff_data_size(handoff_data);
 
 	endmem = arm_mem_ramoops(endmem);
 
-- 
2.47.3
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.