Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932084AbdDMD7v (ORCPT ); Wed, 12 Apr 2017 23:59:51 -0400 Received: from smtp.nue.novell.com ([195.135.221.5]:46961 "EHLO smtp.nue.novell.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751750AbdDMD7s (ORCPT ); Wed, 12 Apr 2017 23:59:48 -0400 From: Gary Lin To: Russell King , Matt Fleming , Ard Biesheuvel , Catalin Marinas , Will Deacon , Thomas Gleixner , Ingo Molnar , "H . Peter Anvin" Cc: x86@kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-efi@vger.kernel.org, Gary Lin , Joey Lee , Vojtech Pavlik Subject: [PATCH v2] efi: Config options to assign versions in the PE-COFF header Date: Thu, 13 Apr 2017 11:58:27 +0800 Message-Id: <20170413035827.9820-1-glin@suse.com> X-Mailer: git-send-email 2.12.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 6349 Lines: 206 This commit adds the new config options to allow the user to modify the following fields in the PE-COFF header. UINT16 MajorOperatingSystemVersion UINT16 MinorOperatingSystemVersion UINT16 MajorImageVersion UINT16 MinorImageVersion Those fields are mainly for the executables or libraries in Windows NT or higher to specify the minimum supported Windows version and the version of the image itself. Given the fact that those fields are ignored in UEFI, we can safely reuse those fields for other purposes, e.g. Security Version(*). (*) https://github.com/lcp/shim/wiki/Security-Version v2 changes: - Modify the header direct instead of using an external script as suggested by Ard Biesheuvel - Include arm and arm64 Cc: Russell King Cc: Matt Fleming Cc: Ard Biesheuvel Cc: Catalin Marinas Cc: Will Deacon Cc: Thomas Gleixner Cc: Ingo Molnar Cc: "H. Peter Anvin" Cc: Joey Lee Cc: Vojtech Pavlik Signed-off-by: Gary Lin --- arch/arm/Kconfig | 24 ++++++++++++++++++++++++ arch/arm/boot/compressed/efi-header.S | 8 ++++---- arch/arm64/Kconfig | 24 ++++++++++++++++++++++++ arch/arm64/kernel/head.S | 8 ++++---- arch/x86/Kconfig | 24 ++++++++++++++++++++++++ arch/x86/boot/header.S | 8 ++++---- 6 files changed, 84 insertions(+), 12 deletions(-) diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 0d4e71b42c77..4965ad2ccc23 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -2090,6 +2090,30 @@ config EFI is only useful for kernels that may run on systems that have UEFI firmware. +config EFI_MAJOR_OS + hex "EFI Major OS Version" + range 0x0 0xFFFF + default "0x0" + depends on EFI_STUB + +config EFI_MINOR_OS + hex "EFI Minor OS Version" + range 0x0 0xFFFF + default "0x0" + depends on EFI_STUB + +config EFI_MAJOR_IMAGE + hex "EFI Major Image Version" + range 0x0 0xFFFF + default "0x0" + depends on EFI_STUB + +config EFI_MINOR_IMAGE + hex "EFI Minor Image Version" + range 0x0 0xFFFF + default "0x0" + depends on EFI_STUB + endmenu menu "CPU Power Management" diff --git a/arch/arm/boot/compressed/efi-header.S b/arch/arm/boot/compressed/efi-header.S index 9d5dc4fda3c1..67715472a76f 100644 --- a/arch/arm/boot/compressed/efi-header.S +++ b/arch/arm/boot/compressed/efi-header.S @@ -69,10 +69,10 @@ extra_header_fields: .long 0 @ ImageBase .long 0x200 @ SectionAlignment .long 0x200 @ FileAlignment - .short 0 @ MajorOperatingSystemVersion - .short 0 @ MinorOperatingSystemVersion - .short 0 @ MajorImageVersion - .short 0 @ MinorImageVersion + .short CONFIG_EFI_MAJOR_OS @ MajorOperatingSystemVersion + .short CONFIG_EFI_MINOR_OS @ MinorOperatingSystemVersion + .short CONFIG_EFI_MAJOR_IMAGE @ MajorImageVersion + .short CONFIG_EFI_MINOR_IMAGE @ MinorImageVersion .short 0 @ MajorSubsystemVersion .short 0 @ MinorSubsystemVersion .long 0 @ Win32VersionValue diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index 3741859765cf..c782c422e58c 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -1033,6 +1033,30 @@ config EFI allow the kernel to be booted as an EFI application. This is only useful on systems that have UEFI firmware. +config EFI_MAJOR_OS + hex "EFI Major OS Version" + range 0x0 0xFFFF + default "0x0" + depends on EFI_STUB + +config EFI_MINOR_OS + hex "EFI Minor OS Version" + range 0x0 0xFFFF + default "0x0" + depends on EFI_STUB + +config EFI_MAJOR_IMAGE + hex "EFI Major Image Version" + range 0x0 0xFFFF + default "0x0" + depends on EFI_STUB + +config EFI_MINOR_IMAGE + hex "EFI Minor Image Version" + range 0x0 0xFFFF + default "0x0" + depends on EFI_STUB + config DMI bool "Enable support for SMBIOS (DMI) tables" depends on EFI diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S index 4fb6ccd886d1..9faa4b04d0ef 100644 --- a/arch/arm64/kernel/head.S +++ b/arch/arm64/kernel/head.S @@ -129,10 +129,10 @@ extra_header_fields: .quad 0 // ImageBase .long 0x1000 // SectionAlignment .long PECOFF_FILE_ALIGNMENT // FileAlignment - .short 0 // MajorOperatingSystemVersion - .short 0 // MinorOperatingSystemVersion - .short 0 // MajorImageVersion - .short 0 // MinorImageVersion + .short CONFIG_EFI_MAJOR_OS // MajorOperatingSystemVersion + .short CONFIG_EFI_MINOR_OS // MinorOperatingSystemVersion + .short CONFIG_EFI_MAJOR_IMAGE // MajorImageVersion + .short CONFIG_EFI_MINOR_IMAGE // MinorImageVersion .short 0 // MajorSubsystemVersion .short 0 // MinorSubsystemVersion .long 0 // Win32VersionValue diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 5bbdef151805..233933fde7dd 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -1803,6 +1803,30 @@ config EFI_STUB See Documentation/efi-stub.txt for more information. +config EFI_MAJOR_OS + hex "EFI Major OS Version" + range 0x0 0xFFFF + default "0x0" + depends on EFI_STUB + +config EFI_MINOR_OS + hex "EFI Minor OS Version" + range 0x0 0xFFFF + default "0x0" + depends on EFI_STUB + +config EFI_MAJOR_IMAGE + hex "EFI Major Image Version" + range 0x0 0xFFFF + default "0x0" + depends on EFI_STUB + +config EFI_MINOR_IMAGE + hex "EFI Minor Image Version" + range 0x0 0xFFFF + default "0x0" + depends on EFI_STUB + config EFI_MIXED bool "EFI mixed-mode support" depends on EFI_STUB && X86_64 diff --git a/arch/x86/boot/header.S b/arch/x86/boot/header.S index 3dd5be33aaa7..863813007207 100644 --- a/arch/x86/boot/header.S +++ b/arch/x86/boot/header.S @@ -156,10 +156,10 @@ extra_header_fields: #endif .long 0x20 # SectionAlignment .long 0x20 # FileAlignment - .word 0 # MajorOperatingSystemVersion - .word 0 # MinorOperatingSystemVersion - .word 0 # MajorImageVersion - .word 0 # MinorImageVersion + .word CONFIG_EFI_MAJOR_OS # MajorOperatingSystemVersion + .word CONFIG_EFI_MINOR_OS # MinorOperatingSystemVersion + .word CONFIG_EFI_MAJOR_IMAGE # MajorImageVersion + .word CONFIG_EFI_MINOR_IMAGE # MinorImageVersion .word 0 # MajorSubsystemVersion .word 0 # MinorSubsystemVersion .long 0 # Win32VersionValue -- 2.12.0