lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:	Thu, 4 Jun 2015 17:35:04 +0800
From:	Yang Yingliang <yangyingliang@...wei.com>
To:	<catalin.marinas@....com>, <will.deacon@....com>
CC:	<linux-arm-kernel@...ts.infradead.org>,
	<linux-kernel@...r.kernel.org>, <bones@...retlab.ca>
Subject: [RFC PATCH] arm64: Image: Allow the appending of a device tree binary

This patch provides the ability to boot using a device tree that is appended
to the raw binary Image (e.g. cat Image <filename>.dtb > Image_w_dtb).

Both BE and LE conditions are tested.

Got references from e2a6a3aa ("ARM: zImage: Allow the appending of a device tree binary").

Signed-off-by: Yang Yingliang <yangyingliang@...wei.com>
---
 arch/arm64/Kconfig              | 11 +++++++++++
 arch/arm64/kernel/head.S        | 12 ++++++++++++
 arch/arm64/kernel/vmlinux.lds.S | 17 +++++++++++++++++
 3 files changed, 40 insertions(+)

diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index 7796af4..d402448 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -660,6 +660,17 @@ endmenu
 
 menu "Boot options"
 
+config ARM64_APPENDED_DTB
+	bool "Use appended device tree blob to Image"
+	depends on OF
+	help
+	  With this option, the boot code will look for a device tree binary
+	  (DTB) appended to Image
+	  (e.g. cat Image <filename>.dtb > Image_w_dtb).
+
+	  With this option, the size of Image will be extended to be 2MB aligned.
+	  The 2MB memory followed by Image is used for FDT blob.
+
 config CMDLINE
 	string "Default kernel command string"
 	default ""
diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S
index 19f915e..ac00c8a 100644
--- a/arch/arm64/kernel/head.S
+++ b/arch/arm64/kernel/head.S
@@ -274,6 +274,18 @@ ENDPROC(preserve_boot_args)
  * The dtb must be 8-byte aligned and live in the first 512M of memory.
  */
 __vet_fdt:
+#ifdef CONFIG_ARM64_APPENDED_DTB
+	ldr	x21, =_edata
+	add	x21, x21, x28
+	ldr	w0, [x21]
+#ifndef __AARCH64EB__
+	ldr	w1, =0xedfe0dd0		// FDT magic word
+#else
+	ldr	w1, =0xd00dfeed
+#endif
+	cmp	w0, w1
+	b.ne	1f			// no FDT found
+#endif
 	tst	x21, #0x7
 	b.ne	1f
 	cmp	x21, x24
diff --git a/arch/arm64/kernel/vmlinux.lds.S b/arch/arm64/kernel/vmlinux.lds.S
index a2c2986..c71bac3 100644
--- a/arch/arm64/kernel/vmlinux.lds.S
+++ b/arch/arm64/kernel/vmlinux.lds.S
@@ -54,6 +54,18 @@ PECOFF_FILE_ALIGNMENT = 0x200;
 #define PECOFF_EDATA_PADDING
 #endif
 
+/*
+ * Set FDT pointer 2MB aligned to ensure
+ * it don't cross a 2-megabyte boundary.
+ */
+FDT_FILE_ALIGNMENT = (1 << 21);
+#ifdef CONFIG_ARM64_APPENDED_DTB
+#define FDT_EDATA_PADDING	\
+	.fdt_edata_padding : { BYTE(0); . = ALIGN(FDT_FILE_ALIGNMENT); }
+#else
+#define FDT_EDATA_PADDING
+#endif
+
 #ifdef CONFIG_DEBUG_ALIGN_RODATA
 #define ALIGN_DEBUG_RO			. = ALIGN(1<<SECTION_SHIFT);
 #define ALIGN_DEBUG_RO_MIN(min)		ALIGN_DEBUG_RO
@@ -149,8 +161,13 @@ SECTIONS
 	_sdata = .;
 	RW_DATA_SECTION(64, PAGE_SIZE, THREAD_SIZE)
 	PECOFF_EDATA_PADDING
+	FDT_EDATA_PADDING	/* 2MB aligned */
 	_edata = .;
 
+#ifdef CONFIG_ARM64_APPENDED_DTB
+	. += (1 << 21);		/* maximum 2MB for FDT blob */
+#endif
+
 	BSS_SECTION(0, 0, 0)
 
 	. = ALIGN(PAGE_SIZE);
-- 
1.8.0


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ