[PATCH v5 01/27] x86/boot: Align vmlinuz sections on page size

Evgeniy Baskov posted 27 patches 2 years, 6 months ago
[PATCH v5 01/27] x86/boot: Align vmlinuz sections on page size
Posted by Evgeniy Baskov 2 years, 6 months ago
To protect sections on page table level each section needs to be
aligned on page size (4KB).

Set sections alignment in linker script for the kernel decompressor
(boot/compressed/vmlinux.lds.S).

Also introduce symbols that can be used to reference compressed
kernel blob section later in the later patches.

Tested-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Evgeniy Baskov <baskov@ispras.ru>
---
 arch/x86/boot/compressed/vmlinux.lds.S | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/arch/x86/boot/compressed/vmlinux.lds.S b/arch/x86/boot/compressed/vmlinux.lds.S
index b22f34b8684a..a5015b958085 100644
--- a/arch/x86/boot/compressed/vmlinux.lds.S
+++ b/arch/x86/boot/compressed/vmlinux.lds.S
@@ -27,31 +27,32 @@ SECTIONS
 		HEAD_TEXT
 		_ehead = . ;
 	}
-	.rodata..compressed : {
+	.rodata..compressed : ALIGN(PAGE_SIZE) {
+		_compressed = .;
 		*(.rodata..compressed)
+		_ecompressed = .;
 	}
-	.text :	{
+	.text :	ALIGN(PAGE_SIZE) {
 		_text = .; 	/* Text */
 		*(.text)
 		*(.text.*)
 		*(.noinstr.text)
 		_etext = . ;
 	}
-	.rodata : {
+	.rodata : ALIGN(PAGE_SIZE) {
 		_rodata = . ;
 		*(.rodata)	 /* read-only data */
 		*(.rodata.*)
 		_erodata = . ;
 	}
-	.data :	{
+	.data :	ALIGN(PAGE_SIZE) {
 		_data = . ;
 		*(.data)
 		*(.data.*)
 		*(.bss.efistub)
 		_edata = . ;
 	}
-	. = ALIGN(L1_CACHE_BYTES);
-	.bss : {
+	.bss : ALIGN(L1_CACHE_BYTES) {
 		_bss = . ;
 		*(.bss)
 		*(.bss.*)
@@ -60,8 +61,7 @@ SECTIONS
 		_ebss = .;
 	}
 #ifdef CONFIG_X86_64
-       . = ALIGN(PAGE_SIZE);
-       .pgtable : {
+       .pgtable : ALIGN(PAGE_SIZE) {
 		_pgtable = . ;
 		*(.pgtable)
 		_epgtable = . ;
-- 
2.39.2
Re: [PATCH v5 01/27] x86/boot: Align vmlinuz sections on page size
Posted by Borislav Petkov 2 years, 5 months ago
On Tue, Mar 14, 2023 at 01:13:28PM +0300, Evgeniy Baskov wrote:
> To protect sections on page table level each section needs to be
> aligned on page size (4KB).

Protect against what?

> Set sections alignment in linker script for the kernel decompressor
> (boot/compressed/vmlinux.lds.S).

Do not talk about *what* the patch is doing in the commit message - that
should be obvious from the diff itself. Rather, concentrate on the *why*
it needs to be done.

> Also introduce symbols that can be used to reference compressed
> kernel blob section later in the later patches.

Introduce those with the respective patch that uses them. This one is
adding section alignment only and that's all that it should do.

Thx.

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette
Re: [PATCH v5 01/27] x86/boot: Align vmlinuz sections on page size
Posted by Evgeniy Baskov 2 years, 5 months ago
On 2023-04-05 20:13, Borislav Petkov wrote:

Sorry for delayed reply.

> On Tue, Mar 14, 2023 at 01:13:28PM +0300, Evgeniy Baskov wrote:
>> To protect sections on page table level each section needs to be
>> aligned on page size (4KB).
> 
> Protect against what?

Protect against invalid memory accesses, mainly caused by bugs, I guess.
I meant just applying tight memory attributes, sorry for the
bad wording. I will change it in the next version.

> 
>> Set sections alignment in linker script for the kernel decompressor
>> (boot/compressed/vmlinux.lds.S).
> 
> Do not talk about *what* the patch is doing in the commit message - 
> that
> should be obvious from the diff itself. Rather, concentrate on the 
> *why*
> it needs to be done.

Makes sense. I'll try to improve it before resubmitting.

> 
>> Also introduce symbols that can be used to reference compressed
>> kernel blob section later in the later patches.
> 
> Introduce those with the respective patch that uses them. This one is
> adding section alignment only and that's all that it should do.

Oh, good point, will do.

> 
> Thx.

Thanks,
Evgeniy Baskov