Skip to contentSkip to conversation

arm64/efi: set PE/COFF file alignment to 512 bytes

PATCH New Ard Biesheuvel 4 participants 8 messages Oct 10, 2014 – Oct 22, 2014

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 arm64/efi: set PE/COFF file alignment to 512 bytes

Change our PE/COFF header to use the minimum file alignment of 512 bytes (0x200), as mandated by the PE/COFF spec v8.3

Also update the linker script so that the Image file itself is also a round multiple of FileAlignment.

---

Another one from the PE/COFF rabbit hole. I will follow up next week and repost as a coherent series, once I have collected all the feedback.

 arch/arm64/kernel/head.S        |  2 +-
 arch/arm64/kernel/vmlinux.lds.S | 17 +++++++++++++++++
 2 files changed, 18 insertions(+), 1 deletion(-)
arch/arm64/kernel/head.S +1 -1
index ba715ce3f7f1..e7e83b3128fd 100644
@@ -162,7 +162,7 @@ optional_header:
 extra_header_fields:
 	.quad	0				// ImageBase
 	.long	0x1000				// SectionAlignment
-	.long	0x8				// FileAlignment
+	.long	PECOFF_FILE_ALIGNMENT		// FileAlignment
 	.short	0				// MajorOperatingSystemVersion
 	.short	0				// MinorOperatingSystemVersion
 	.short	0				// MajorImageVersion
arch/arm64/kernel/vmlinux.lds.S +17 -0
index edf8715ba39b..4596f46d0244 100644
@@ -32,6 +32,22 @@ jiffies = jiffies_64;
 	*(.hyp.text)					\
 	VMLINUX_SYMBOL(__hyp_text_end) = .;
 
+/*
+ * The size of the PE/COFF section that covers the kernel image, which
+ * runs from stext to _edata, must be a round multiple of the PE/COFF
+ * FileAlignment, which we set to its minimum value of 0x200. 'stext'
+ * itself is 4 KB aligned, so padding out _edata to a 0x200 aligned
+ * boundary should be sufficient.
+ */
+PECOFF_FILE_ALIGNMENT = 0x200;
+
+#ifdef CONFIG_EFI
+#define PECOFF_EDATA_PADDING	\
+	.pecoff_edata_padding : { BYTE(0); . = ALIGN(PECOFF_FILE_ALIGNMENT); }
+#else
+#define PECOFF_EDATA_PADDING
+#endif
+
 SECTIONS
 {
 	/*
@@ -103,6 +119,7 @@ SECTIONS
 	_data = .;
 	_sdata = .;
 	RW_DATA_SECTION(64, PAGE_SIZE, THREAD_SIZE)
+	PECOFF_EDATA_PADDING
 	_edata = .;
 
 	BSS_SECTION(0, 0, 0)
Signature · 1 line
1.8.3.2
#1 lore raw

PATCH 1/1 arm64/efi: set PE/COFF file alignment to 512 bytes

Quoted 8 lines · Ard Biesheuvel

Change our PE/COFF header to use the minimum file alignment of 512 bytes (0x200), as mandated by the PE/COFF spec v8.3

Also update the linker script so that the Image file itself is also a round multiple of FileAlignment.

---

Quoted 59 lines

Another one from the PE/COFF rabbit hole. I will follow up next week and repost as a coherent series, once I have collected all the feedback.

 arch/arm64/kernel/head.S        |  2 +-
 arch/arm64/kernel/vmlinux.lds.S | 17 +++++++++++++++++
 2 files changed, 18 insertions(+), 1 deletion(-)
arch/arm64/kernel/head.S +1 -1
index ba715ce3f7f1..e7e83b3128fd 100644
@@ -162,7 +162,7 @@ optional_header:
 extra_header_fields:
        .quad   0                               // ImageBase
        .long   0x1000                          // SectionAlignment
-       .long   0x8                             // FileAlignment
+       .long   PECOFF_FILE_ALIGNMENT           // FileAlignment
        .short  0                               // MajorOperatingSystemVersion
        .short  0                               // MinorOperatingSystemVersion
        .short  0                               // MajorImageVersion
arch/arm64/kernel/vmlinux.lds.S +17 -1
index edf8715ba39b..4596f46d0244 100644
@@ -32,6 +32,22 @@ jiffies = jiffies_64;
        *(.hyp.text)                                    \
        VMLINUX_SYMBOL(__hyp_text_end) = .;
 
+/*
+ * The size of the PE/COFF section that covers the kernel image, which
+ * runs from stext to _edata, must be a round multiple of the PE/COFF
+ * FileAlignment, which we set to its minimum value of 0x200. 'stext'
+ * itself is 4 KB aligned, so padding out _edata to a 0x200 aligned
+ * boundary should be sufficient.
+ */
+PECOFF_FILE_ALIGNMENT = 0x200;
+
+#ifdef CONFIG_EFI
+#define PECOFF_EDATA_PADDING   \
+       .pecoff_edata_padding : { BYTE(0); . = ALIGN(PECOFF_FILE_ALIGNMENT); }
+#else
+#define PECOFF_EDATA_PADDING
+#endif
+
 SECTIONS
 {
        /*
@@ -103,6 +119,7 @@ SECTIONS
        _data = .;
        _sdata = .;
        RW_DATA_SECTION(64, PAGE_SIZE, THREAD_SIZE)
+       PECOFF_EDATA_PADDING
        _edata = .;
 
        BSS_SECTION(0, 0, 0)
--

1.8.3.2

#2 lore raw

PATCH 1/1 arm64/efi: set PE/COFF file alignment to 512 bytes

Quoted 5 lines · Roy Franz
Quoted 3 lines · Ard Biesheuvel

Change our PE/COFF header to use the minimum file alignment of 512 bytes (0x200), as mandated by the PE/COFF spec v8.3

Quoted 7 lines
Quoted 5 lines

Also update the linker script so that the Image file itself is also a round multiple of FileAlignment.

---

Whut? Is there some patch authorship madness going on here?

Who wrote the patch?

Signature · 1 line
Matt Fleming, Intel Open Source Technology Center
#3 lore raw

PATCH 1/1 arm64/efi: set PE/COFF file alignment to 512 bytes

Quoted 9 lines · Matt Fleming
Quoted 8 lines · Roy Franz
Quoted 6 lines · Ard Biesheuvel

Change our PE/COFF header to use the minimum file alignment of 512 bytes (0x200), as mandated by the PE/COFF spec v8.3

Also update the linker script so that the Image file itself is also a round multiple of FileAlignment.

Quoted 9 lines
Quoted 4 lines
Quoted 2 lines

---

Whut? Is there some patch authorship madness going on here?

Who wrote the patch?

I wrote the patch, and I suppose Roy meant to ack it.

Roy?

Signature · 1 line
Ard.
#4 lore raw

PATCH 1/1 arm64/efi: set PE/COFF file alignment to 512 bytes

Quoted 20 lines · Ard Biesheuvel
Quoted 9 lines · Matt Fleming
Quoted 8 lines · Roy Franz
Quoted 6 lines · Ard Biesheuvel

Change our PE/COFF header to use the minimum file alignment of 512 bytes (0x200), as mandated by the PE/COFF spec v8.3

Also update the linker script so that the Image file itself is also a round multiple of FileAlignment.

Quoted 9 lines
Quoted 4 lines
Quoted 2 lines

---

Whut? Is there some patch authorship madness going on here?

Who wrote the patch?

Quoted 6 lines

I wrote the patch, and I suppose Roy meant to ack it.

Roy?

--
Ard.

Sorry!

maintainer
#5 lore raw

PATCH 1/1 arm64/efi: set PE/COFF file alignment to 512 bytes

In reply to Ard Biesheuvel
Quoted 11 lines · Ard Biesheuvel

Change our PE/COFF header to use the minimum file alignment of 512 bytes (0x200), as mandated by the PE/COFF spec v8.3

Also update the linker script so that the Image file itself is also a round multiple of FileAlignment.

---

Another one from the PE/COFF rabbit hole. I will follow up next week and repost as a coherent series, once I have collected all the feedback.

If Matt is taking more patches in this series, here's my ack:

#6 lore raw

PATCH 1/1 arm64/efi: set PE/COFF file alignment to 512 bytes

In reply to Ard Biesheuvel
Quoted 11 lines · Ard Biesheuvel

Change our PE/COFF header to use the minimum file alignment of 512 bytes (0x200), as mandated by the PE/COFF spec v8.3

Also update the linker script so that the Image file itself is also a round multiple of FileAlignment.

---

Another one from the PE/COFF rabbit hole. I will follow up next week and repost as a coherent series, once I have collected all the feedback.

It appears a though next week never came.

Should I pick up this version and apply ACK tags from the mailing list? Or are you planning on sending a larger series?

It sounds like this should be tagged for stable, and placed into the EFI urgent queue?

Signature · 1 line
Matt Fleming, Intel Open Source Technology Center
#7 lore raw

PATCH 1/1 arm64/efi: set PE/COFF file alignment to 512 bytes

Quoted 13 lines · Matt Fleming
Quoted 11 lines · Ard Biesheuvel

Change our PE/COFF header to use the minimum file alignment of 512 bytes (0x200), as mandated by the PE/COFF spec v8.3

Also update the linker script so that the Image file itself is also a round multiple of FileAlignment.

---

Another one from the PE/COFF rabbit hole. I will follow up next week and repost as a coherent series, once I have collected all the feedback.

Quoted 8 lines

It appears a though next week never came.

Should I pick up this version and apply ACK tags from the mailing list? Or are you planning on sending a larger series?

It sounds like this should be tagged for stable, and placed into the EFI urgent queue?

I have a couple of patches like this one in my queue, and I don't think any of them are urgent. These alignment fixes etc are mainly for full compliance with the various specs, and there are no known issues being solved by them.

I was going to wait for -rc1 and rebase on top of that, but it appears your branch hasn't been picked up?

Signature · 1 line
Ard.