[RFC v3 PATCH 0/2] Introduce Security Version to EFI Stub

Josh Boyer jwboyer at fedoraproject.org
Tue Dec 5 13:14:26 PST 2017


On Tue, Dec 5, 2017 at 5:01 AM, Gary Lin <glin at suse.com> wrote:
> The series of patches introduce Security Version to EFI stub.
>
> Security Version is a monotonically increasing number and designed to
> prevent the user from loading an insecure kernel accidentally. The
> bootloader maintains a list of security versions corresponding to
> different distributions. After fixing a critical vulnerability, the
> distribution kernel maintainer bumps the "version", and the bootloader
> updates the list automatically. When the user tries to load a kernel
> with a lower security version, the bootloader shows a warning prompt
> to notify the user the potential risk.

If a distribution releases a kernel with a higher security version and
that it automatically updated on boot, what happens if that kernel
contains a different bug that causes it to fail to boot or break
critical functionality?  At that point, the user's machine would be in
a state where the higher security version is enforced but the only
kernel that provides that is broken.  Wouldn't that make a bad
situation even worse by now requiring manual acceptance of the older
SV kernel boot physically at the machine?

I feel like I'm missing a detail here or something.

josh

> For more details: https://github.com/lcp/shim/wiki/Security-Version
>
> The original idea is to add a new PE/COFF section to store the data.
> However, there are some restrictions.
>
> 1. For x86, the size limit of the EFI header is 0x200, and a section entry
>    in the section table takes 40 bytes. Currently, the EFI header already
>    occupies the first 0x1da bytes, so there is no room for a new section
>    entry.
>
> 2. The MemoryAttributes table sets the attributes of memory pages according
>    to the section flags. For ARM64, the minimal granularity is 4KB, but
>    Security Version only needs a few bytes, and it's pointless to allocate
>    4KB for it.
>
> Fortunately, there is a special section defined in PE/COFF: resource
> section. The only known user of the resource section in UEFI is the HII
> protocol which fetches data from "HII" directory. For Security Version, a
> new directory called "LinuxSV" is created and it contains the file offset
> to the struct of Security Version. The bootloader just follows the
> resource table to fetch the "version" from the image file.
>
> v3:
>     - Move everything to the resource section to be compatible with both
>       x86 and ARM64
> v2:
>     - Decrease the size of secdata_offset to 2 bytes since the setup header
>       is limited to around 32KB.
>     - Restructure the secdata section. The signer is now a null-terminated
>       string. The type of distro_version changes to u32 in case the distro
>       uses a long version.
>     - Modify the Kconfig names and add help.
>     - Remove the signer name hack in build.c.
>
> Cc: "H. Peter Anvin" <hpa at zytor.com>
> Cc: Thomas Gleixner <tglx at linutronix.de>
> Cc: Ard Biesheuvel <ard.biesheuvel at linaro.org>
> Cc: Ingo Molnar <mingo at redhat.com>
> Cc: Matt Fleming <matt at codeblueprint.co.uk>
> Cc: Catalin Marinas <catalin.marinas at arm.com>
> Cc: Will Deacon <will.deacon at arm.com>
> Cc: Joey Lee <jlee at suse.com>
> Signed-off-by: Gary Lin <glin at suse.com>
>
> Gary Lin (2):
>   x86/efi: Introduce Security Version to x86
>   arm64/efi: Introduce Security Version to ARM64
>
>  arch/arm64/kernel/efi-header.S | 57 ++++++++++++++++++++++++++++++++++++++++++
>  arch/x86/boot/header.S         | 55 ++++++++++++++++++++++++++++++++++++++++
>  drivers/firmware/efi/Kconfig   | 40 +++++++++++++++++++++++++++++
>  3 files changed, 152 insertions(+)
>
> --
> 2.15.0
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-efi" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html



More information about the linux-arm-kernel mailing list