Linux-EFI Archive mirror
 help / color / mirror / Atom feed
From: Mike Beaton <mjsbeaton@gmail.com>
To: linux-efi@vger.kernel.org
Subject: Broken section alignment in 6.7 and 6.8rc EFI stub
Date: Mon, 5 Feb 2024 00:08:00 +0000	[thread overview]
Message-ID: <CAHzAAWQ6srV6LVNdmfbJhOwhBw5ZzxxZZ07aHt9oKkfYAdvuQQ@mail.gmail.com> (raw)

Good evening.

Linux kernels from 6.7 upwards (including 6.8rc) appear to have broken
PE section alignment in their EFI stub.

Up to 6.6, we see monotonically increasing and contiguous VMA and LMA,
as  expected for a well-formed PE/COFF file.

In 6.7 and 6.8 these addresses basically jump around all over the place.

At least one loader which is believed to be enforcing strong but
reasonable rules on PE section layout refuses to load these:
https://github.com/acidanthera/bugtracker/issues/2371#issuecomment-1925801292

objdumps of some example kernels (two good, three bad) follow:

$ objdump -h vmlinuz-5.15.0-92-generic

vmlinuz-5.15.0-92-generic:     file format pei-x86-64

Sections:
Idx Name          Size      VMA               LMA               File off  Algn
  0 .setup        00003bc0  0000000001000200  0000000001000200  00000200  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .reloc        00000020  0000000001003dc0  0000000001003dc0  00003dc0  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  2 .compat       00000020  0000000001003de0  0000000001003de0  00003de0  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  3 .text         00b0f4c0  0000000001003e00  0000000001003e00  00003e00  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
$ objdump -h vmlinuz-6.6.11-zabbly+

vmlinuz-6.6.11-zabbly+:     file format pei-x86-64

Sections:
Idx Name          Size      VMA               LMA               File off  Algn
  0 .setup        00003dc0  0000000001000200  0000000001000200  00000200  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .reloc        00000020  0000000001003fc0  0000000001003fc0  00003fc0  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  2 .compat       00000020  0000000001003fe0  0000000001003fe0  00003fe0  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  3 .text         00d6e400  0000000001004000  0000000001004000  00004000  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
$ objdump -h vmlinuz-6.7.3-3-liquorix-amd64

vmlinuz-6.7.3-3-liquorix-amd64:     file format pei-x86-64

Sections:
Idx Name          Size      VMA               LMA               File off  Algn
  0 .setup        00003000  0000000000001000  0000000000001000  00001000  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  1 .compat       00000008  0000000000c0e000  0000000000c0e000  00004000  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  2 .text         00baa000  0000000000005000  0000000000005000  00005000  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  3 .data         00001200  0000000000baf000  0000000000baf000  00baf000  2**4
                  CONTENTS, ALLOC, LOAD, DATA
$ objdump -h vmlinuz-6.7.3-zabbly+

vmlinuz-6.7.3-zabbly+:     file format pei-x86-64

Sections:
Idx Name          Size      VMA               LMA               File off  Algn
  0 .setup        00003000  0000000000001000  0000000000001000  00001000  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  1 .compat       00000008  0000000000df0000  0000000000df0000  00004000  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  2 .text         00d84000  0000000000005000  0000000000005000  00005000  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  3 .data         00001200  0000000000d89000  0000000000d89000  00d89000  2**4
                  CONTENTS, ALLOC, LOAD, DATA
$ objdump -h vmlinuz-6.8.0-0.rc3.225.vanilla.fc39.x86_64

vmlinuz-6.8.0-0.rc3.225.vanilla.fc39.x86_64:     file format pei-x86-64

Sections:
Idx Name          Size      VMA               LMA               File off  Algn
  0 .setup        00003000  0000000000001000  0000000000001000  00001000  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  1 .compat       00000008  0000000000e8b000  0000000000e8b000  00004000  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  2 .text         00e1f000  0000000000005000  0000000000005000  00005000  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  3 .data         00001200  0000000000e24000  0000000000e24000  00e24000  2**4
                  CONTENTS, ALLOC, LOAD, DATA
$

             reply	other threads:[~2024-02-05  0:08 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-05  0:08 Mike Beaton [this message]
2024-02-05  2:06 ` Broken section alignment in 6.7 and 6.8rc EFI stub Bagas Sanjaya
2024-02-05  7:36   ` Mike Beaton
2024-02-05  7:47     ` Ard Biesheuvel
2024-02-05  7:59       ` Ard Biesheuvel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAHzAAWQ6srV6LVNdmfbJhOwhBw5ZzxxZZ07aHt9oKkfYAdvuQQ@mail.gmail.com \
    --to=mjsbeaton@gmail.com \
    --cc=linux-efi@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).