All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ard Biesheuvel <ardb@kernel.org>
To: Arvind Sankar <nivedita@alum.mit.edu>
Cc: Sergey Shatunov <me@prok.pw>,
	bp@alien8.de, hpa@zytor.com,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	mingo@redhat.com, Thomas Gleixner <tglx@linutronix.de>,
	x86@kernel.org, linux-efi <linux-efi@vger.kernel.org>,
	initramfs@vger.kernel.org,
	Donovan Tremura <neurognostic@protonmail.ch>,
	Harald Hoyer <harald@hoyer.xyz>
Subject: Re: [PATCH 1/2] x86/boot/compressed/64: Remove .bss/.pgtable from bzImage
Date: Mon, 6 Apr 2020 09:32:47 +0200	[thread overview]
Message-ID: <CAMj1kXEUhyv886CjyKvjw2F12WaZxZRUWF6t_XzP4C2TJPdpeg@mail.gmail.com> (raw)
In-Reply-To: <20200406035110.GA3241052@rani.riverdale.lan>

On Mon, 6 Apr 2020 at 05:51, Arvind Sankar <nivedita@alum.mit.edu> wrote:
>
> On Mon, Apr 06, 2020 at 07:00:39AM +0700, Sergey Shatunov wrote:
> > On Sun, 2020-04-05 at 19:18 -0400, Arvind Sankar wrote:
> > > I'm not familiar with systemd-boot: when you say systemd-boot stub,
> > > is
> > > that something different from the kernel's EFI_STUB option? Or is it
> > > just a kernel with EFI_STUB enabled and with builtin initramfs +
> > > builtin
> > > cmdline?
> > Basicaly systemd-boot stub is efi application with packed EFI_STUB-
> > enabled kernel, initrd and cmdline into single file. Source can be
> > found here:
> > https://github.com/systemd/systemd/blob/master/src/boot/efi/stub.c
> >
> > It doesn't do anything unusual, just extracting data from sections and
> > calling efi handover.
> >
> > Final image created by objcopy'ing precompiled stub and adding sections with that stuff:
> >
> >     objcopy \
> >         --add-section .osrel=os_release --change-section-vma
> > '.osrel=0x20000' \
> >         --add-section .cmdline=cmdline --change-section-vma
> > '.cmdline=0x30000' \
> >         --add-section .linux=vmlinuz --change-section-vma
> > '.linux=0x2000000' \
> >         --add-section .initrd=initrd --change-section-vma
> > '.initrd=0x3000000' \
> >         /usr/lib/systemd/boot/efi/linuxx64.efi.stub output.efi
>
> So this embeds the bzImage which is a PE executable inside another PE
> executable. Before my patch, the bss section was explicitly part of the
> bzImage and so would have been zero, now it isn't any more and the PE
> loader is expected to zero it out before executing. systemd-boot's stub
> loader doesn't do that prior to jumping to the EFI handover entry, so
> the issue must be because bss contains garbage.  I'm not 100% sure why
> that leads to a crash, as the only variables in bss in the EFI stub are
> for some boolean EFI command line arguments, so it ought to still have
> worked, just as though it was invoked with random arguments. Anyway we
> need to handle an uninitialized bss to get this to work properly.
>

The EFI handover protocol strikes again :-(

It seems we did not include any guidance in the documentation in
Documentation/x86/boot.rst regarding zero-initializing BSS, and come
to think of it, we don't include any other requirements either, i.e.,
regarding placement wrt section alignment etc. This is a serious bug.
Even though EFI usually lays out PE/COFF images in files the exact way
they appear in memory, this is not actually required by the spec. Most
notably, the virtual size can be smaller than the file size, and the
loader is expected to zero-initialize the difference as well.

Since the EFI handover protocol should be considered deprecated at
this point (and is never going to be supported in upstream GRUB
either, for instance), I would recommend the systemd-boot developers
to start looking into deprecating this as well, and switch to the
ordinary PE/COFF entry point, and use the new initrd callback protocol
for initrd loading.

On the Linux/x86 side, we should at least add some code to the EFI
handover protocol entry point to zero initialize BSS, and ensure that
it is either not needed in other places, or add the code to deal with
those as well.

> I also see from systemd [0] and dracut source [1] that these VMA's seem
> to be hardcoded with no checking for how big the files actually are, and
> objcopy doesn't seem to complain if sections end up overlapping.
>
> So since [2] in dracut, the space available for the .linux section
> containing the bzImage shrank from ~48MiB to 16MiB. This will hopefully
> still fit the compressed kernel (although an allyesconfig bzImage is far
> bigger than even 48MiB), but in-place decompression is unlikely to be
> possible even for a normal config, which will break another patchset
> that got merged into mainline for 5.7 [3,4], which tries to avoid
> copying the kernel unless necessary, and has a good chance of triggering
> in-place decompression if kaslr is disabled.
>
> I'll get systemd-boot installed here so I can reproduce and implement
> some workarounds for both issues. I should hopefully have a fix in a day
> or two.
>

Thanks Arvind.

  reply	other threads:[~2020-04-06  7:33 UTC|newest]

Thread overview: 130+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-09 15:02 [PATCH 1/2] x86/boot/compressed/64: Remove .bss/.pgtable from bzImage Arvind Sankar
2020-01-09 15:02 ` [PATCH 2/2] x86/boot/compressed: Remove unnecessary sections " Arvind Sankar
2020-02-06 11:44   ` Kees Cook
2020-02-19 16:55   ` [tip: x86/boot] " tip-bot2 for Arvind Sankar
2020-02-22  5:08   ` [PATCH 2/2] " Nathan Chancellor
2020-02-22  6:55     ` Borislav Petkov
2020-02-22  7:02       ` Nathan Chancellor
2020-02-22  7:21         ` Fangrui Song
2020-02-22  7:42           ` Nathan Chancellor
2020-02-22 15:37             ` Arvind Sankar
2020-02-22 16:44               ` Arvind Sankar
2020-02-22 17:18                 ` [PATCH] x86/boot/compressed: Fix compressed kernel linking with lld Arvind Sankar
2020-02-22 18:14                   ` Nathan Chancellor
2020-02-22 18:58                     ` Fangrui Song
2020-02-22 20:17                       ` Arvind Sankar
2020-02-22 21:01                         ` Fangrui Song
2020-02-22 23:33                           ` Nick Desaulniers
2020-02-22 23:57                             ` Arvind Sankar
2020-02-23 19:37                               ` [PATCH 0/2] Stop generating .eh_frame sections Arvind Sankar
2020-02-24  4:15                                 ` Nathan Chancellor
2020-02-24 20:49                                 ` Nick Desaulniers
2020-02-24 21:53                                   ` Arvind Sankar
2020-02-24 22:01                                     ` Nick Desaulniers
2020-02-23 19:37                               ` [PATCH 1/2] arch/x86: Use -fno-asynchronous-unwind-tables to suppress " Arvind Sankar
2020-02-24 20:33                                 ` Nick Desaulniers
2020-02-24 21:05                                   ` Arvind Sankar
2020-02-24 21:12                                     ` Fangrui Song
2020-02-24 21:17                                       ` Nick Desaulniers
2020-02-24 21:22                                         ` Nick Desaulniers
2020-02-23 19:37                               ` [PATCH 2/2] arch/x86: Drop unneeded linker script discard of .eh_frame Arvind Sankar
2020-02-24 20:45                                 ` Nick Desaulniers
2020-02-24 21:33                                   ` Arvind Sankar
2020-02-24 21:58                                     ` Nick Desaulniers
2020-02-24 23:21                                       ` [PATCH v2 0/2] Stop generating .eh_frame sections Arvind Sankar
2020-02-24 23:21                                       ` [PATCH v2 1/2] arch/x86: Use -fno-asynchronous-unwind-tables to suppress " Arvind Sankar
2020-02-24 23:28                                         ` Nathan Chancellor
2020-02-24 23:30                                         ` Nick Desaulniers
2020-02-25  4:10                                         ` Kees Cook
2020-02-25 16:53                                         ` [tip: x86/boot] x86/*/Makefile: " tip-bot2 for Arvind Sankar
2020-02-24 23:21                                       ` [PATCH v2 2/2] arch/x86: Drop unneeded linker script discard of .eh_frame Arvind Sankar
2020-02-24 23:28                                         ` Nathan Chancellor
2020-02-24 23:33                                         ` Nick Desaulniers
2020-02-25  4:11                                         ` Kees Cook
2020-02-25 16:53                                         ` [tip: x86/boot] x86/vmlinux: " tip-bot2 for Arvind Sankar
2020-02-23 22:00                           ` [PATCH] x86/boot/compressed: Fix compressed kernel linking with lld Kees Cook
2020-02-24  6:06                             ` Fangrui Song
2020-02-22 17:29                 ` [PATCH 2/2] x86/boot/compressed: Remove unnecessary sections from bzImage Borislav Petkov
2020-02-22 17:53                   ` Arvind Sankar
2020-02-22  7:42           ` Borislav Petkov
2020-02-22 16:22             ` Arvind Sankar
2020-02-22 23:20               ` Nick Desaulniers
2020-02-24 13:28                 ` Michael Matz
2020-02-24 20:51                   ` Nick Desaulniers
2020-02-24 21:28                     ` Fangrui Song
2020-02-24 21:48                       ` Arvind Sankar
2020-02-24 22:17                         ` Fangrui Song
2020-02-24 22:43                           ` Arvind Sankar
2020-02-24 22:50                             ` Fangrui Song
2020-02-24 23:08                               ` Arvind Sankar
2020-02-25  5:35                 ` --orphan-handling=warn (was Re: [PATCH 2/2] x86/boot/compressed: Remove unnecessary sections) " Kees Cook
2020-02-25 16:42                   ` --orphan-handling=warn Arvind Sankar
2020-02-25 18:29                   ` --orphan-handling=warn Arvind Sankar
2020-02-25 19:42                     ` --orphan-handling=warn Kees Cook
2020-02-25 20:37                       ` --orphan-handling=warn Nick Desaulniers
2020-02-25 22:02                         ` --orphan-handling=warn Kees Cook
2020-02-26  1:56                           ` --orphan-handling=warn Fangrui Song
2020-02-26  5:35                             ` --orphan-handling=warn Kees Cook
2020-02-26 19:11                               ` --orphan-handling=warn Kristen Carlson Accardi
2020-02-26 19:26                                 ` --orphan-handling=warn Nick Desaulniers
2020-02-24 11:37   ` [tip: x86/boot] x86/boot/compressed: Remove .eh_frame section from bzImage tip-bot2 for Arvind Sankar
2020-02-24 16:41     ` Arvind Sankar
2020-02-24 17:16       ` Borislav Petkov
2020-02-24 17:28         ` Arvind Sankar
2020-02-05 16:29 ` [PATCH 1/2] x86/boot/compressed/64: Remove .bss/.pgtable " Arvind Sankar
2020-02-18 18:03   ` Arvind Sankar
2020-02-19 12:09     ` Borislav Petkov
2020-02-19 17:57       ` Arvind Sankar
2020-02-19 18:22         ` Borislav Petkov
2020-02-19 19:06           ` Arvind Sankar
2020-02-06 11:18 ` Kees Cook
2020-02-19 16:55 ` [tip: x86/boot] " tip-bot2 for Arvind Sankar
2020-04-05 15:42 ` [PATCH 1/2] " Sergey Shatunov
2020-04-05 23:18   ` Arvind Sankar
2020-04-06  0:00     ` Sergey Shatunov
2020-04-06  3:51       ` Arvind Sankar
2020-04-06  3:51         ` Arvind Sankar
2020-04-06  7:32         ` Ard Biesheuvel [this message]
2020-04-06  8:47           ` Borislav Petkov
2020-04-06  9:11             ` Ard Biesheuvel
2020-04-06  9:11               ` Ard Biesheuvel
2020-04-06 11:20               ` Borislav Petkov
2020-04-06 11:20                 ` Borislav Petkov
2020-04-06 13:22                 ` Arvind Sankar
2020-04-06 13:29                   ` Ard Biesheuvel
2020-04-06 13:29                     ` Ard Biesheuvel
2020-04-06 16:01                     ` Arvind Sankar
2020-04-06 16:01                       ` Arvind Sankar
2020-04-06 16:22                       ` Ard Biesheuvel
2020-04-06 16:22                         ` Ard Biesheuvel
2020-04-06 16:52                         ` Arvind Sankar
2020-04-06 16:52                           ` Arvind Sankar
2020-04-06 16:59                           ` Ard Biesheuvel
2020-04-06 18:06                             ` [PATCH 1/2] efi/x86: Move efi stub globals from .bss to .data Arvind Sankar
2020-04-06 18:06                               ` Arvind Sankar
2020-04-06 18:06                               ` [PATCH 2/2] efi/x86: Always relocate the kernel for EFI handover entry Arvind Sankar
2020-04-14  8:20                                 ` [tip: efi/urgent] " tip-bot2 for Arvind Sankar
2020-04-06 18:29                               ` [PATCH 1/2] efi/x86: Move efi stub globals from .bss to .data Ard Biesheuvel
2020-04-06 18:29                                 ` Ard Biesheuvel
2020-04-08  7:43                               ` Dave Young
2020-04-08  7:43                                 ` Dave Young
2020-04-08  7:49                                 ` Ard Biesheuvel
2020-04-08  7:49                                   ` Ard Biesheuvel
2020-04-09 14:39                                   ` Arvind Sankar
2020-04-09 14:47                                     ` Ard Biesheuvel
2020-04-09 16:35                                       ` Arvind Sankar
2020-04-09 16:35                                         ` Arvind Sankar
2020-04-10 14:47                                         ` Arvind Sankar
2020-04-10 14:47                                           ` Arvind Sankar
2020-04-10 15:26                                           ` Ard Biesheuvel
2020-04-14 14:57                                             ` Daniel Kiper
2020-04-14 14:57                                               ` Daniel Kiper
2020-04-10 11:26                               ` Thomas Meyer
2020-04-10 14:38                                 ` Arvind Sankar
2020-04-11  8:50                                   ` Thomas Meyer
2020-04-14  8:20                               ` [tip: efi/urgent] " tip-bot2 for Arvind Sankar
2020-04-06 17:21                     ` [PATCH 1/2] x86/boot/compressed/64: Remove .bss/.pgtable from bzImage Borislav Petkov
2020-04-06 17:21                       ` Borislav Petkov
2020-04-06  8:44     ` Ard Biesheuvel
2020-04-06 12:36       ` Sergey Shatunov
2020-04-06 13:20         ` 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=CAMj1kXEUhyv886CjyKvjw2F12WaZxZRUWF6t_XzP4C2TJPdpeg@mail.gmail.com \
    --to=ardb@kernel.org \
    --cc=bp@alien8.de \
    --cc=harald@hoyer.xyz \
    --cc=hpa@zytor.com \
    --cc=initramfs@vger.kernel.org \
    --cc=linux-efi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=me@prok.pw \
    --cc=mingo@redhat.com \
    --cc=neurognostic@protonmail.ch \
    --cc=nivedita@alum.mit.edu \
    --cc=tglx@linutronix.de \
    --cc=x86@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.