Re: [PATCH v5 02/13] x86/kexec: refactor for kernel/Kconfig.kexec

Eric DeVolder <[email protected]>
Newsgroups gmane.linux.ports.sh.devel
Message-ID <c7e2b428-eb61-50c3-dd44-2d3fbe39301d__18556.838452217$1688732254$gmane$org@oracle.com>

On 7/7/23 00:58, Christophe Leroy wrote:
> 
> 
> Le 07/07/2023 à 00:20, Eric DeVolder a écrit :
>> The kexec and crash kernel options are provided in the common
>> kernel/Kconfig.kexec. Utilize the common options and provide
>> the ARCH_SUPPORTS_ and ARCH_SELECTS_ entries to recreate the
>> equivalent set of KEXEC and CRASH options.
> 
> 
> Why do you need to duplicate the ARCH_SELECTS_ entries in each
> architecture ?
> 
> Why not define them in arch/Kconfig then select if from each architecture ?
> 
> For instance here for x86 for ARCH_SELECTS_KEXEC_FILE all you'll have to
> do is:
> 	select ARCH_SELECTS_KEXEC_FILE if KEXEC_FILE
> 	select HAVE_IMA_KEXEC if IMA && KEXEC_FILE
> 
> 
> Christophe

Hi Christophe, thanks for looking at this!
The ARCH_SELECTS_ is where the "customization" is performed for that option. The customization is 
putting in place the differences that the arch had from the common option.

For example, with ARCH_SELECTS_KEXEC_FILE, here are all the uses:

x86:
     select HAVE_IMA_KEXEC if IMA

arm64:
     select HAVE_IMA_KEXEC if IMA

powerpc:
     select KEXEC_ELF
     select HAVE_IMA_KEXEC if IMA

riscv:
     select HAVE_IMA_KEXEC if IMA
     select KEXEC_ELF

And there are archs (parisc, riscv, s390) that support KEXEC_FILE that do not need 
ARCH_SELECTS_KEXEC_FILE.

So there isn't a clear path for optimizing the IMA statement, in this example, that I'm aware of.

But perhaps I don't quite understand the technique you are suggesting, either...

eric



> 
>>
>> Signed-off-by: Eric DeVolder <[email protected]>
>> ---
>>    arch/x86/Kconfig | 92 ++++++++++--------------------------------------
>>    1 file changed, 19 insertions(+), 73 deletions(-)
>>
>> diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
>> index 7422db409770..9767a343f7c2 100644
>> --- a/arch/x86/Kconfig
>> +++ b/arch/x86/Kconfig
>> @@ -2040,88 +2040,34 @@ config EFI_RUNTIME_MAP
>>    
>>    source "kernel/Kconfig.hz"
>>    
>> -config KEXEC
>> -	bool "kexec system call"
>> -	select KEXEC_CORE
>> -	help
>> -	  kexec is a system call that implements the ability to shutdown your
>> -	  current kernel, and to start another kernel.  It is like a reboot
>> -	  but it is independent of the system firmware.   And like a reboot
>> -	  you can start any kernel with it, not just Linux.
>> -
>> -	  The name comes from the similarity to the exec system call.
>> -
>> -	  It is an ongoing process to be certain the hardware in a machine
>> -	  is properly shutdown, so do not be surprised if this code does not
>> -	  initially work for you.  As of this writing the exact hardware
>> -	  interface is strongly in flux, so no good recommendation can be
>> -	  made.
>> -
>> -config KEXEC_FILE
>> -	bool "kexec file based system call"
>> -	select KEXEC_CORE
>> -	select HAVE_IMA_KEXEC if IMA
>> -	depends on X86_64
>> -	depends on CRYPTO=y
>> -	depends on CRYPTO_SHA256=y
>> -	help
>> -	  This is new version of kexec system call. This system call is
>> -	  file based and takes file descriptors as system call argument
>> -	  for kernel and initramfs as opposed to list of segments as
>> -	  accepted by previous system call.
>> +config ARCH_SUPPORTS_KEXEC
>> +	def_bool y
>>    
>> -config ARCH_HAS_KEXEC_PURGATORY
>> -	def_bool KEXEC_FILE
>> +config ARCH_SUPPORTS_KEXEC_FILE
>> +	def_bool X86_64 && CRYPTO && CRYPTO_SHA256
>>    
>> -config KEXEC_SIG
>> -	bool "Verify kernel signature during kexec_file_load() syscall"
>> +config ARCH_SELECTS_KEXEC_FILE
>> +	def_bool y
>>    	depends on KEXEC_FILE
>> -	help
>> +	select HAVE_IMA_KEXEC if IMA
>>    
>> -	  This option makes the kexec_file_load() syscall check for a valid
>> -	  signature of the kernel image.  The image can still be loaded without
>> -	  a valid signature unless you also enable KEXEC_SIG_FORCE, though if
>> -	  there's a signature that we can check, then it must be valid.
>> +config ARCH_HAS_KEXEC_PURGATORY
>> +	def_bool KEXEC_FILE
>>    
>> -	  In addition to this option, you need to enable signature
>> -	  verification for the corresponding kernel image type being
>> -	  loaded in order for this to work.
>> +config ARCH_SUPPORTS_KEXEC_SIG
>> +	def_bool y
>>    
>> -config KEXEC_SIG_FORCE
>> -	bool "Require a valid signature in kexec_file_load() syscall"
>> -	depends on KEXEC_SIG
>> -	help
>> -	  This option makes kernel signature verification mandatory for
>> -	  the kexec_file_load() syscall.
>> +config ARCH_SUPPORTS_KEXEC_SIG_FORCE
>> +	def_bool y
>>    
>> -config KEXEC_BZIMAGE_VERIFY_SIG
>> -	bool "Enable bzImage signature verification support"
>> -	depends on KEXEC_SIG
>> -	depends on SIGNED_PE_FILE_VERIFICATION
>> -	select SYSTEM_TRUSTED_KEYRING
>> -	help
>> -	  Enable bzImage signature verification support.
>> +config ARCH_SUPPORTS_KEXEC_BZIMAGE_VERIFY_SIG
>> +	def_bool y
>>    
>> -config CRASH_DUMP
>> -	bool "kernel crash dumps"
>> -	depends on X86_64 || (X86_32 && HIGHMEM)
>> -	help
>> -	  Generate crash dump after being started by kexec.
>> -	  This should be normally only set in special crash dump kernels
>> -	  which are loaded in the main kernel with kexec-tools into
>> -	  a specially reserved region and then later executed after
>> -	  a crash by kdump/kexec. The crash dump kernel must be compiled
>> -	  to a memory address not used by the main kernel or BIOS using
>> -	  PHYSICAL_START, or it must be built as a relocatable image
>> -	  (CONFIG_RELOCATABLE=y).
>> -	  For more details see Documentation/admin-guide/kdump/kdump.rst
>> +config ARCH_SUPPORTS_KEXEC_JUMP
>> +	def_bool y
>>    
>> -config KEXEC_JUMP
>> -	bool "kexec jump"
>> -	depends on KEXEC && HIBERNATION
>> -	help
>> -	  Jump between original kernel and kexeced kernel and invoke
>> -	  code in physical address mode via KEXEC
>> +config ARCH_SUPPORTS_CRASH_DUMP
>> +	def_bool X86_64 || (X86_32 && HIGHMEM)
>>    
>>    config PHYSICAL_START
>>    	hex "Physical address where the kernel is loaded" if (EXPERT || CRASH_DUMP)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.